@sleep2agi/agent-network-dashboard 0.5.3-preview.210 → 0.5.3-preview.212

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 (156) 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 +5 -5
  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/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  134. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  138. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  139. package/.next/server/middleware-build-manifest.js +3 -3
  140. package/.next/server/pages/404.html +2 -2
  141. package/.next/server/pages/500.html +1 -1
  142. package/.next/static/chunks/{0_5bx.ra9kap9.js → 054p1--pwg60t.js} +3 -3
  143. package/.next/static/chunks/{051~.vno73m41.js → 0apd6mdrbto5c.js} +1 -1
  144. package/.next/static/chunks/{0e20d3m55ia2k.js → 0b0-7zxsflbws.js} +1 -1
  145. package/.next/static/chunks/{0kawbcl2g5q6s.js → 0f8..rye42edf.js} +1 -1
  146. package/.next/static/chunks/{17if82x7mcn4j.css → 0zj09tmygg8m~.css} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +26 -0
  150. package/app/globals.css +75 -0
  151. package/package.json +1 -1
  152. package/scripts/topo-chrome-wrapper-halo-test.mjs +83 -0
  153. package/scripts/topo-vendor-distribution-wrapper-halo-test.mjs +93 -0
  154. /package/.next/static/{3D5_n49X1pW-2zn5wZP3e → V7Zd44BGBcU5vm1jUUEX7}/_buildManifest.js +0 -0
  155. /package/.next/static/{3D5_n49X1pW-2zn5wZP3e → V7Zd44BGBcU5vm1jUUEX7}/_clientMiddlewareManifest.js +0 -0
  156. /package/.next/static/{3D5_n49X1pW-2zn5wZP3e → V7Zd44BGBcU5vm1jUUEX7}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":296,"timestamp":266599369780,"id":4,"parentId":1,"tags":{},"startTime":1779074571616,"traceId":"c5e0fd22305abed3"},{"name":"load-custom-routes","duration":458,"timestamp":266599370244,"id":5,"parentId":1,"tags":{},"startTime":1779074571617,"traceId":"c5e0fd22305abed3"},{"name":"create-dist-dir","duration":708,"timestamp":266599370743,"id":6,"parentId":1,"tags":{},"startTime":1779074571617,"traceId":"c5e0fd22305abed3"},{"name":"clean","duration":32932,"timestamp":266599372175,"id":7,"parentId":1,"tags":{},"startTime":1779074571618,"traceId":"c5e0fd22305abed3"},{"name":"discover-routes","duration":9183,"timestamp":266599487310,"id":8,"parentId":1,"tags":{},"startTime":1779074571734,"traceId":"c5e0fd22305abed3"},{"name":"create-root-mapping","duration":123,"timestamp":266599496549,"id":9,"parentId":1,"tags":{},"startTime":1779074571743,"traceId":"c5e0fd22305abed3"},{"name":"generate-route-types","duration":34185,"timestamp":266599499187,"id":10,"parentId":1,"tags":{},"startTime":1779074571745,"traceId":"c5e0fd22305abed3"},{"name":"public-dir-conflict-check","duration":94,"timestamp":266599533460,"id":11,"parentId":1,"tags":{},"startTime":1779074571780,"traceId":"c5e0fd22305abed3"},{"name":"generate-routes-manifest","duration":4535,"timestamp":266599533667,"id":12,"parentId":1,"tags":{},"startTime":1779074571780,"traceId":"c5e0fd22305abed3"},{"name":"run-turbopack","duration":6146202,"timestamp":266599544696,"id":14,"parentId":1,"tags":{},"startTime":1779074571791,"traceId":"c5e0fd22305abed3"},{"name":"turbopack-build-events","duration":101,"timestamp":266599833156,"id":15,"parentId":1,"tags":{},"startTime":1779074572079,"traceId":"c5e0fd22305abed3"},{"name":"run-typescript","duration":9867233,"timestamp":266605706439,"id":16,"parentId":1,"tags":{},"startTime":1779074577953,"traceId":"c5e0fd22305abed3"},{"name":"generate-required-server-files","duration":2284,"timestamp":266615574594,"id":18,"parentId":1,"tags":{},"startTime":1779074587821,"traceId":"c5e0fd22305abed3"},{"name":"check-static-error-page","duration":15642,"timestamp":266615716310,"id":20,"parentId":19,"tags":{},"startTime":1779074587963,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":508640,"timestamp":266615736229,"id":65,"parentId":22,"tags":{},"startTime":1779074587983,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":532643,"timestamp":266615719117,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779074587965,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":616372,"timestamp":266615737104,"id":70,"parentId":29,"tags":{},"startTime":1779074587983,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":630828,"timestamp":266615722748,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779074587969,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":622608,"timestamp":266615737337,"id":72,"parentId":32,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":636777,"timestamp":266615723294,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779074587970,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":624981,"timestamp":266615735813,"id":64,"parentId":21,"tags":{},"startTime":1779074587982,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":642918,"timestamp":266615717935,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779074587964,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":629893,"timestamp":266615736537,"id":67,"parentId":26,"tags":{},"startTime":1779074587983,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":644027,"timestamp":266615722486,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779074587969,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":634534,"timestamp":266615737627,"id":75,"parentId":35,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":648407,"timestamp":266615723809,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779074587970,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":660686,"timestamp":266615737649,"id":76,"parentId":36,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":674058,"timestamp":266615724358,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779074587971,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":664018,"timestamp":266615737512,"id":73,"parentId":33,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":678085,"timestamp":266615723504,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779074587970,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":666405,"timestamp":266615736670,"id":68,"parentId":27,"tags":{},"startTime":1779074587983,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":680560,"timestamp":266615722573,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779074587969,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":676459,"timestamp":266615737678,"id":77,"parentId":37,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":689646,"timestamp":266615724549,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779074587971,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":687731,"timestamp":266615737691,"id":78,"parentId":38,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":700761,"timestamp":266615724717,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779074587971,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":708235,"timestamp":266615737731,"id":81,"parentId":42,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":720689,"timestamp":266615725380,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779074587972,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":712454,"timestamp":266615737599,"id":74,"parentId":34,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":726459,"timestamp":266615723661,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779074587970,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":716073,"timestamp":266615737741,"id":82,"parentId":44,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":728017,"timestamp":266615725855,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779074587972,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":719479,"timestamp":266615737754,"id":83,"parentId":45,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":731249,"timestamp":266615726032,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779074587972,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":722850,"timestamp":266615737765,"id":84,"parentId":46,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":734509,"timestamp":266615726148,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779074587972,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":724067,"timestamp":266615737779,"id":85,"parentId":47,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":735629,"timestamp":266615726271,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779074587973,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":724823,"timestamp":266615737270,"id":71,"parentId":30,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":739278,"timestamp":266615722858,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779074587969,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":730351,"timestamp":266615737789,"id":86,"parentId":48,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":741798,"timestamp":266615726387,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779074587973,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":730629,"timestamp":266615737718,"id":80,"parentId":40,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":743412,"timestamp":266615724975,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779074587971,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":730721,"timestamp":266615737802,"id":87,"parentId":49,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":740502,"timestamp":266615728058,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779074587974,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":741260,"timestamp":266615737825,"id":89,"parentId":51,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":750858,"timestamp":266615728303,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779074587975,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":737396,"timestamp":266615744469,"id":91,"parentId":31,"tags":{},"startTime":1779074587991,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":758981,"timestamp":266615722960,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779074587969,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":744447,"timestamp":266615737705,"id":79,"parentId":39,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":757347,"timestamp":266615724840,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779074587971,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":752770,"timestamp":266615743275,"id":90,"parentId":24,"tags":{},"startTime":1779074587990,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":776398,"timestamp":266615719718,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779074587966,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":751250,"timestamp":266615746645,"id":93,"parentId":43,"tags":{},"startTime":1779074587993,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":772432,"timestamp":266615725534,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779074587972,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":753953,"timestamp":266615745336,"id":92,"parentId":41,"tags":{},"startTime":1779074587992,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":774227,"timestamp":266615725107,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779074587971,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":774570,"timestamp":266615737816,"id":88,"parentId":50,"tags":{},"startTime":1779074587984,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":784251,"timestamp":266615728196,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779074587974,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":772693,"timestamp":266615753031,"id":96,"parentId":53,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":796911,"timestamp":266615728884,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779074587975,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":798595,"timestamp":266615753076,"id":99,"parentId":56,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":822198,"timestamp":266615729549,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779074587976,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":832884,"timestamp":266615736799,"id":69,"parentId":28,"tags":{},"startTime":1779074587983,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":847105,"timestamp":266615722660,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779074587969,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":819072,"timestamp":266615752966,"id":94,"parentId":23,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":852650,"timestamp":266615719440,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779074587966,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":824129,"timestamp":266615755352,"id":102,"parentId":61,"tags":{},"startTime":1779074588002,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":848357,"timestamp":266615731338,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779074587978,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":828828,"timestamp":266615753041,"id":97,"parentId":54,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":852822,"timestamp":266615729093,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779074587975,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":831035,"timestamp":266615753054,"id":98,"parentId":55,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":854829,"timestamp":266615729321,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779074587976,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":828874,"timestamp":266615763491,"id":105,"parentId":60,"tags":{},"startTime":1779074588010,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":861556,"timestamp":266615730855,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779074587977,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":839383,"timestamp":266615755383,"id":103,"parentId":62,"tags":{},"startTime":1779074588002,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":863305,"timestamp":266615731505,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779074587978,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":844709,"timestamp":266615753089,"id":100,"parentId":58,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":867417,"timestamp":266615730429,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779074587977,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":823307,"timestamp":266615776074,"id":106,"parentId":57,"tags":{},"startTime":1779074588022,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":869601,"timestamp":266615729814,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779074587976,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":856411,"timestamp":266615755394,"id":104,"parentId":63,"tags":{},"startTime":1779074588002,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":880196,"timestamp":266615731664,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779074587978,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":879769,"timestamp":266615736402,"id":66,"parentId":25,"tags":{},"startTime":1779074587983,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":893885,"timestamp":266615722347,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779074587969,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":877279,"timestamp":266615752999,"id":95,"parentId":52,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":901636,"timestamp":266615728706,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779074587975,"traceId":"c5e0fd22305abed3"},{"name":"is-page-static","duration":911983,"timestamp":266615753204,"id":101,"parentId":59,"tags":{},"startTime":1779074587999,"traceId":"c5e0fd22305abed3"},{"name":"check-page","duration":934608,"timestamp":266615730653,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779074587977,"traceId":"c5e0fd22305abed3"},{"name":"static-check","duration":949923,"timestamp":266615715379,"id":19,"parentId":1,"tags":{},"startTime":1779074587962,"traceId":"c5e0fd22305abed3"}]
2
- [{"name":"write-routes-manifest","duration":391,"timestamp":266616674081,"id":108,"parentId":1,"tags":{},"startTime":1779074588920,"traceId":"c5e0fd22305abed3"},{"name":"load-dotenv","duration":45,"timestamp":266616686304,"id":111,"parentId":110,"tags":{},"startTime":1779074588933,"traceId":"c5e0fd22305abed3"},{"name":"run-export-path-map","duration":606,"timestamp":266616688789,"id":112,"parentId":110,"tags":{},"startTime":1779074588935,"traceId":"c5e0fd22305abed3"},{"name":"next-export","duration":695450,"timestamp":266616685120,"id":110,"parentId":1,"tags":{},"startTime":1779074588931,"traceId":"c5e0fd22305abed3"},{"name":"move-exported-app-not-found-","duration":683,"timestamp":266617383854,"id":113,"parentId":109,"tags":{},"startTime":1779074589630,"traceId":"c5e0fd22305abed3"},{"name":"move-exported-app-global-error-","duration":564,"timestamp":266617384692,"id":114,"parentId":109,"tags":{},"startTime":1779074589631,"traceId":"c5e0fd22305abed3"},{"name":"static-generation","duration":708378,"timestamp":266616678938,"id":109,"parentId":1,"tags":{},"startTime":1779074588925,"traceId":"c5e0fd22305abed3"},{"name":"write-routes-manifest","duration":453,"timestamp":266617387572,"id":115,"parentId":1,"tags":{},"startTime":1779074589634,"traceId":"c5e0fd22305abed3"},{"name":"print-tree-view","duration":6599,"timestamp":266617400761,"id":116,"parentId":1,"tags":{},"startTime":1779074589647,"traceId":"c5e0fd22305abed3"},{"name":"write-route-bundle-stats","duration":15718,"timestamp":266617407400,"id":117,"parentId":1,"tags":{},"startTime":1779074589654,"traceId":"c5e0fd22305abed3"},{"name":"telemetry-flush","duration":22970,"timestamp":266617423150,"id":118,"parentId":1,"tags":{},"startTime":1779074589669,"traceId":"c5e0fd22305abed3"},{"name":"next-build","duration":18128178,"timestamp":266599317972,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779074571564,"traceId":"c5e0fd22305abed3"}]
1
+ [{"name":"generate-buildid","duration":324,"timestamp":394873646422,"id":4,"parentId":1,"tags":{},"startTime":1779202845893,"traceId":"663c734bfb8b5033"},{"name":"load-custom-routes","duration":506,"timestamp":394873646899,"id":5,"parentId":1,"tags":{},"startTime":1779202845893,"traceId":"663c734bfb8b5033"},{"name":"create-dist-dir","duration":719,"timestamp":394873647451,"id":6,"parentId":1,"tags":{},"startTime":1779202845894,"traceId":"663c734bfb8b5033"},{"name":"clean","duration":34455,"timestamp":394873648822,"id":7,"parentId":1,"tags":{},"startTime":1779202845895,"traceId":"663c734bfb8b5033"},{"name":"discover-routes","duration":24301,"timestamp":394873772492,"id":8,"parentId":1,"tags":{},"startTime":1779202846019,"traceId":"663c734bfb8b5033"},{"name":"create-root-mapping","duration":124,"timestamp":394873796856,"id":9,"parentId":1,"tags":{},"startTime":1779202846043,"traceId":"663c734bfb8b5033"},{"name":"generate-route-types","duration":19479,"timestamp":394873799939,"id":10,"parentId":1,"tags":{},"startTime":1779202846046,"traceId":"663c734bfb8b5033"},{"name":"public-dir-conflict-check","duration":99,"timestamp":394873819508,"id":11,"parentId":1,"tags":{},"startTime":1779202846066,"traceId":"663c734bfb8b5033"},{"name":"generate-routes-manifest","duration":4920,"timestamp":394873819732,"id":12,"parentId":1,"tags":{},"startTime":1779202846066,"traceId":"663c734bfb8b5033"},{"name":"run-turbopack","duration":6100801,"timestamp":394873830114,"id":14,"parentId":1,"tags":{},"startTime":1779202846076,"traceId":"663c734bfb8b5033"},{"name":"turbopack-build-events","duration":114,"timestamp":394874135053,"id":15,"parentId":1,"tags":{},"startTime":1779202846381,"traceId":"663c734bfb8b5033"},{"name":"run-typescript","duration":10401599,"timestamp":394879938839,"id":16,"parentId":1,"tags":{},"startTime":1779202852185,"traceId":"663c734bfb8b5033"},{"name":"generate-required-server-files","duration":3169,"timestamp":394890341850,"id":18,"parentId":1,"tags":{},"startTime":1779202862588,"traceId":"663c734bfb8b5033"},{"name":"check-static-error-page","duration":15207,"timestamp":394890537611,"id":20,"parentId":19,"tags":{},"startTime":1779202862784,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":472395,"timestamp":394890557882,"id":65,"parentId":22,"tags":{},"startTime":1779202862804,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":490236,"timestamp":394890540221,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779202862786,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":608376,"timestamp":394890558780,"id":71,"parentId":30,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":623284,"timestamp":394890543977,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779202862790,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":632152,"timestamp":394890558846,"id":72,"parentId":32,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":646801,"timestamp":394890544303,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779202862791,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":642965,"timestamp":394890558254,"id":68,"parentId":27,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":657624,"timestamp":394890543720,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779202862790,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":648034,"timestamp":394890559108,"id":74,"parentId":34,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":662759,"timestamp":394890544476,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779202862791,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":652614,"timestamp":394890558353,"id":69,"parentId":28,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":667248,"timestamp":394890543804,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779202862790,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":677381,"timestamp":394890559024,"id":73,"parentId":33,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":692089,"timestamp":394890544399,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779202862791,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":686084,"timestamp":394890559177,"id":77,"parentId":37,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":699816,"timestamp":394890545517,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779202862792,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":690068,"timestamp":394890559136,"id":75,"parentId":35,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":704709,"timestamp":394890544562,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779202862791,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":690938,"timestamp":394890559193,"id":78,"parentId":38,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":704301,"timestamp":394890545877,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779202862792,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":697687,"timestamp":394890559151,"id":76,"parentId":36,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":711576,"timestamp":394890545318,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779202862792,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":698025,"timestamp":394890559214,"id":80,"parentId":40,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":711176,"timestamp":394890546108,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779202862792,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":702582,"timestamp":394890559238,"id":82,"parentId":44,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":714928,"timestamp":394890546939,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779202862793,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":706676,"timestamp":394890559246,"id":83,"parentId":45,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":718890,"timestamp":394890547075,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779202862793,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":714604,"timestamp":394890559259,"id":84,"parentId":46,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":726731,"timestamp":394890547179,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779202862793,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":722242,"timestamp":394890558029,"id":66,"parentId":25,"tags":{},"startTime":1779202862804,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":736884,"timestamp":394890543450,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779202862790,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":722055,"timestamp":394890558631,"id":70,"parentId":29,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":736866,"timestamp":394890543883,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779202862790,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":721657,"timestamp":394890559271,"id":85,"parentId":47,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":731436,"timestamp":394890549530,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779202862796,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":724004,"timestamp":394890559206,"id":79,"parentId":39,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":737262,"timestamp":394890545995,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779202862792,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":729568,"timestamp":394890559306,"id":88,"parentId":50,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":739132,"timestamp":394890549791,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779202862796,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":730721,"timestamp":394890559317,"id":89,"parentId":51,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":740251,"timestamp":394890549841,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779202862796,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":731441,"timestamp":394890559226,"id":81,"parentId":42,"tags":{},"startTime":1779202862805,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":744226,"timestamp":394890546499,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779202862793,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":721068,"timestamp":394890573126,"id":91,"parentId":31,"tags":{},"startTime":1779202862819,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":751284,"timestamp":394890544085,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779202862790,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":726438,"timestamp":394890569270,"id":90,"parentId":24,"tags":{},"startTime":1779202862816,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":755034,"timestamp":394890540781,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779202862787,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":722534,"timestamp":394890573994,"id":92,"parentId":41,"tags":{},"startTime":1779202862820,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":750367,"timestamp":394890546204,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779202862792,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":724559,"timestamp":394890575348,"id":93,"parentId":43,"tags":{},"startTime":1779202862822,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":753316,"timestamp":394890546631,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779202862793,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":743004,"timestamp":394890558148,"id":67,"parentId":26,"tags":{},"startTime":1779202862804,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":757583,"timestamp":394890543619,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779202862790,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":744250,"timestamp":394890559286,"id":86,"parentId":48,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":753932,"timestamp":394890549647,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779202862796,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":760556,"timestamp":394890557489,"id":64,"parentId":21,"tags":{},"startTime":1779202862804,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":779226,"timestamp":394890538889,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779202862785,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":761205,"timestamp":394890559294,"id":87,"parentId":49,"tags":{},"startTime":1779202862806,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":770825,"timestamp":394890549732,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779202862796,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":783065,"timestamp":394890578334,"id":99,"parentId":56,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":810776,"timestamp":394890550702,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779202862797,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":787854,"timestamp":394890578280,"id":95,"parentId":52,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":816024,"timestamp":394890550190,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779202862796,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":794186,"timestamp":394890578492,"id":102,"parentId":61,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":820447,"timestamp":394890552325,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779202862799,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":801058,"timestamp":394890578250,"id":94,"parentId":23,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":838865,"timestamp":394890540528,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779202862787,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":805449,"timestamp":394890578506,"id":103,"parentId":62,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":831565,"timestamp":394890552473,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779202862799,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":807431,"timestamp":394890578320,"id":98,"parentId":55,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":835259,"timestamp":394890550566,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779202862797,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":809022,"timestamp":394890578516,"id":104,"parentId":63,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":834990,"timestamp":394890552597,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779202862799,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":811934,"timestamp":394890578296,"id":96,"parentId":53,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":839962,"timestamp":394890550317,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779202862797,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":811916,"timestamp":394890578471,"id":101,"parentId":59,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":838757,"timestamp":394890551731,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779202862798,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":798364,"timestamp":394890594471,"id":105,"parentId":60,"tags":{},"startTime":1779202862841,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":840996,"timestamp":394890551889,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779202862798,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":789211,"timestamp":394890612573,"id":106,"parentId":57,"tags":{},"startTime":1779202862859,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":850937,"timestamp":394890550893,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779202862797,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":825198,"timestamp":394890578343,"id":100,"parentId":58,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":852039,"timestamp":394890551539,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779202862798,"traceId":"663c734bfb8b5033"},{"name":"is-page-static","duration":829450,"timestamp":394890578306,"id":97,"parentId":54,"tags":{},"startTime":1779202862825,"traceId":"663c734bfb8b5033"},{"name":"check-page","duration":857364,"timestamp":394890550431,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779202862797,"traceId":"663c734bfb8b5033"},{"name":"static-check","duration":871347,"timestamp":394890536504,"id":19,"parentId":1,"tags":{},"startTime":1779202862783,"traceId":"663c734bfb8b5033"}]
2
+ [{"name":"write-routes-manifest","duration":502,"timestamp":394891418349,"id":108,"parentId":1,"tags":{},"startTime":1779202863665,"traceId":"663c734bfb8b5033"},{"name":"load-dotenv","duration":56,"timestamp":394891430405,"id":111,"parentId":110,"tags":{},"startTime":1779202863677,"traceId":"663c734bfb8b5033"},{"name":"run-export-path-map","duration":565,"timestamp":394891433325,"id":112,"parentId":110,"tags":{},"startTime":1779202863680,"traceId":"663c734bfb8b5033"},{"name":"next-export","duration":638872,"timestamp":394891429066,"id":110,"parentId":1,"tags":{},"startTime":1779202863675,"traceId":"663c734bfb8b5033"},{"name":"move-exported-app-not-found-","duration":477,"timestamp":394892071141,"id":113,"parentId":109,"tags":{},"startTime":1779202864317,"traceId":"663c734bfb8b5033"},{"name":"move-exported-app-global-error-","duration":377,"timestamp":394892071701,"id":114,"parentId":109,"tags":{},"startTime":1779202864318,"traceId":"663c734bfb8b5033"},{"name":"static-generation","duration":651424,"timestamp":394891422962,"id":109,"parentId":1,"tags":{},"startTime":1779202863669,"traceId":"663c734bfb8b5033"},{"name":"write-routes-manifest","duration":531,"timestamp":394892074673,"id":115,"parentId":1,"tags":{},"startTime":1779202864321,"traceId":"663c734bfb8b5033"},{"name":"print-tree-view","duration":5115,"timestamp":394892095746,"id":116,"parentId":1,"tags":{},"startTime":1779202864342,"traceId":"663c734bfb8b5033"},{"name":"write-route-bundle-stats","duration":15324,"timestamp":394892100899,"id":117,"parentId":1,"tags":{},"startTime":1779202864347,"traceId":"663c734bfb8b5033"},{"name":"telemetry-flush","duration":232234,"timestamp":394892116271,"id":118,"parentId":1,"tags":{},"startTime":1779202864363,"traceId":"663c734bfb8b5033"},{"name":"next-build","duration":18756588,"timestamp":394873591962,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779202845838,"traceId":"663c734bfb8b5033"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6146202,"timestamp":266599544696,"id":14,"parentId":1,"tags":{},"startTime":1779074571791,"traceId":"c5e0fd22305abed3"},{"name":"turbopack-build-events","duration":101,"timestamp":266599833156,"id":15,"parentId":1,"tags":{},"startTime":1779074572079,"traceId":"c5e0fd22305abed3"},{"name":"run-typescript","duration":9867233,"timestamp":266605706439,"id":16,"parentId":1,"tags":{},"startTime":1779074577953,"traceId":"c5e0fd22305abed3"},{"name":"static-check","duration":949923,"timestamp":266615715379,"id":19,"parentId":1,"tags":{},"startTime":1779074587962,"traceId":"c5e0fd22305abed3"},{"name":"static-generation","duration":708378,"timestamp":266616678938,"id":109,"parentId":1,"tags":{},"startTime":1779074588925,"traceId":"c5e0fd22305abed3"},{"name":"telemetry-flush","duration":22970,"timestamp":266617423150,"id":118,"parentId":1,"tags":{},"startTime":1779074589669,"traceId":"c5e0fd22305abed3"},{"name":"next-build","duration":18128178,"timestamp":266599317972,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779074571564,"traceId":"c5e0fd22305abed3"}]
1
+ [{"name":"run-turbopack","duration":6100801,"timestamp":394873830114,"id":14,"parentId":1,"tags":{},"startTime":1779202846076,"traceId":"663c734bfb8b5033"},{"name":"turbopack-build-events","duration":114,"timestamp":394874135053,"id":15,"parentId":1,"tags":{},"startTime":1779202846381,"traceId":"663c734bfb8b5033"},{"name":"run-typescript","duration":10401599,"timestamp":394879938839,"id":16,"parentId":1,"tags":{},"startTime":1779202852185,"traceId":"663c734bfb8b5033"},{"name":"static-check","duration":871347,"timestamp":394890536504,"id":19,"parentId":1,"tags":{},"startTime":1779202862783,"traceId":"663c734bfb8b5033"},{"name":"static-generation","duration":651424,"timestamp":394891422962,"id":109,"parentId":1,"tags":{},"startTime":1779202863669,"traceId":"663c734bfb8b5033"},{"name":"telemetry-flush","duration":232234,"timestamp":394892116271,"id":118,"parentId":1,"tags":{},"startTime":1779202864363,"traceId":"663c734bfb8b5033"},{"name":"next-build","duration":18756588,"timestamp":394873591962,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779202845838,"traceId":"663c734bfb8b5033"}]
@@ -2222,6 +2222,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2222
2222
  aria-label="Topology layout"
2223
2223
  data-topo-chrome-layout-trailer
2224
2224
  data-topo-chrome-layout-radius="rounded-lg"
2225
+ /* R697 — wrapper-level multi-layer halo on inner button hover
2226
+ (via CSS :has() in globals.css). 53rd anchor in family. */
2227
+ data-topo-chrome-wrapper-halo-family="layout"
2225
2228
  >
2226
2229
  <button
2227
2230
  onClick={() => { popChrome('layout-ring'); if (layout !== 'ring') toggleLayout(); }}
@@ -3771,6 +3774,25 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
3771
3774
  <span
3772
3775
  className="hidden sm:inline-flex items-center gap-2 px-2.5 py-1 rounded-md bg-gray-500/10 text-gray-400 border border-gray-500/20 font-mono"
3773
3776
  title="Hover to highlight; click to pin"
3777
+ /* Round 698 — vendor-distribution chip-row outer wrapper
3778
+ joins the R697 wrapper-level :has() halo family. Pre-R698
3779
+ only the chrome-strip wrappers (Layout/nodeSize/zoom)
3780
+ echoed inner-button hover at the parent scope. R698
3781
+ extends the vocabulary to a NEW parent: the vendor
3782
+ distribution chip-row. When user hovers any inner
3783
+ vendor letter chip (A:N / O:N / 书:N / ?:N — all are
3784
+ `<span role="button">`), the outer wrapper itself
3785
+ halos in cyan-300 (2+4 stride, 0.5/0.25 alpha), matching
3786
+ R697's cadence. Reads as "this vendor-distribution
3787
+ control group is active" — same gesture R697 introduced
3788
+ at the chrome strip, now at the chip strip. 54th anchor
3789
+ in multi-layer halo family — 2nd wrapper-level :has()
3790
+ anchor. CSS rule lives in globals.css ~1228+ using
3791
+ :has([role="button"]:hover) instead of :has(button:hover)
3792
+ because vendor chips are role="button" spans (not real
3793
+ <button>). The selector variant extends R697's :has()
3794
+ vocabulary from real buttons to ARIA buttons. */
3795
+ data-topo-chrome-vendor-distribution-wrapper="true"
3774
3796
  >
3775
3797
  {vendorDist.map(v => {
3776
3798
  const isPinned = pinnedVendor === v.initial;
@@ -15946,6 +15968,8 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
15946
15968
  role="group"
15947
15969
  aria-label="Node size"
15948
15970
  data-topo-chrome-fleet-group-trailer
15971
+ /* R697 sibling — wrapper-level has-hover halo (see globals.css). */
15972
+ data-topo-chrome-wrapper-halo-family="nodesize"
15949
15973
  >
15950
15974
  {([['S', 0.7], ['M', 0.84], ['L', 1]] as const).map(([lbl, v], idx) => {
15951
15975
  const popKey = `size-${lbl}` as 'size-S' | 'size-M' | 'size-L';
@@ -16102,6 +16126,8 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
16102
16126
  }}
16103
16127
  data-topo-chrome-view-group-leader
16104
16128
  data-topo-chrome-zoom-wrapper
16129
+ /* R697 sibling — wrapper-level has-hover halo (see globals.css). */
16130
+ data-topo-chrome-wrapper-halo-family="zoom"
16105
16131
  >
16106
16132
  <button
16107
16133
  onClick={() => { popChrome('zoom-out'); zoomByDiscrete(1 / 1.2); }}
package/app/globals.css CHANGED
@@ -1186,6 +1186,81 @@ body {
1186
1186
  filter 200ms ease-out;
1187
1187
  }
1188
1188
 
1189
+ /* Round 697 — chrome strip segmented-control wrappers gain a wrapper-
1190
+ level multi-layer halo when ANY inner button is hovered. Pre-R697
1191
+ the 3 chrome wrappers (Layout / nodeSize / zoom) had only static
1192
+ border + background — individual buttons inside halo via R674/R675/
1193
+ R673/R668 but the parent wrapper stayed flat. R697 uses CSS `:has()`
1194
+ to detect inner button hover and applies a 2-layer drop-shadow at
1195
+ cyan-300 (#67e8f9) — compact-chrome tier (2+4 stride, 0.5/0.25 alpha).
1196
+
1197
+ When user hovers a child Ring/Grid/S/M/L/zoom button, the WRAPPER
1198
+ itself echoes the inner-button halo outward in a soft glow — chrome
1199
+ strip reads as one coherent "this control group is active" gesture
1200
+ alongside the per-button cyan halo.
1201
+
1202
+ Cyan-300 hardcoded (vs theme-driven pal.legendAccent) since CSS
1203
+ doesn't have a clean handle on the React-computed palette token at
1204
+ this wrapper level. Cyan-300 ≈ light theme's pal.legendAccent
1205
+ (#0d9488 teal-600) is bluish; the halo is hover-only + brief so the
1206
+ slight cross-theme hue mismatch is acceptable.
1207
+
1208
+ transition: filter 200ms ease-out — matches the inner buttons'
1209
+ 200ms cadence so wrapper + buttons ease together on hover-in/out.
1210
+
1211
+ 53rd anchor in multi-layer halo family — first wrapper-level
1212
+ has-hover anchor. Closes chrome-strip "active control group"
1213
+ signal at the parent scope alongside R667-R675 per-button anchors. */
1214
+ [data-topo-chrome-layout-trailer]:has(button:hover),
1215
+ [data-topo-chrome-fleet-group-trailer]:has(button:hover),
1216
+ [data-topo-chrome-zoom-wrapper]:has(button:hover) {
1217
+ filter: drop-shadow(0 0 2px rgba(103, 232, 249, 0.5))
1218
+ drop-shadow(0 0 4px rgba(103, 232, 249, 0.25));
1219
+ }
1220
+ [data-topo-chrome-layout-trailer],
1221
+ [data-topo-chrome-fleet-group-trailer],
1222
+ [data-topo-chrome-zoom-wrapper] {
1223
+ transition: background-color 200ms ease-out,
1224
+ border-color 200ms ease-out,
1225
+ filter 200ms ease-out;
1226
+ }
1227
+
1228
+ /* ─────────────────────────────────────────────────────────────────────
1229
+ Round 698 — vendor-distribution chip-row outer wrapper joins the
1230
+ R697 wrapper-level :has() halo family. Pre-R698 only the chrome-strip
1231
+ wrappers (Layout/nodeSize/zoom) echoed inner-button hover at the
1232
+ parent scope; the vendor-distribution wrapper stayed flat even though
1233
+ its inner vendor letter chips already halo'd per-element (R676/R688/
1234
+ R690).
1235
+
1236
+ R697 used `:has(button:hover)` because chrome wrappers contain real
1237
+ <button> children. The vendor letter chips are `<span role="button">`
1238
+ (clickable spans, not buttons — preserves inline-baseline alignment
1239
+ with the title text). The :has() selector variant `[role="button"]:hover`
1240
+ extends R697's wrapper-level vocabulary from real-button children
1241
+ to ARIA-button children — same gesture, broader applicability.
1242
+
1243
+ Cyan-300 (#67e8f9) at 2+4 stride, 0.5/0.25 alpha — matches R697
1244
+ cadence exactly. Transition matches the per-chip 200ms hover cascade.
1245
+ When user hovers any A:N / O:N / 书:N / ?:N chip, the outer chip-row
1246
+ wrapper echoes the per-chip halo outward — reads as "this vendor-
1247
+ distribution control group is active" alongside the existing R676
1248
+ vendor letter glyph halo + R688 count suffix halo.
1249
+
1250
+ 54th anchor in multi-layer halo family — 2nd wrapper-level :has()
1251
+ anchor. First :has() rule targeting [role="button"] (vs <button>)
1252
+ children. Closes vendor-chip-row "active control group" signal at
1253
+ the parent scope. */
1254
+ [data-topo-chrome-vendor-distribution-wrapper]:has([role="button"]:hover) {
1255
+ filter: drop-shadow(0 0 2px rgba(103, 232, 249, 0.5))
1256
+ drop-shadow(0 0 4px rgba(103, 232, 249, 0.25));
1257
+ }
1258
+ [data-topo-chrome-vendor-distribution-wrapper] {
1259
+ transition: background-color 200ms ease-out,
1260
+ border-color 200ms ease-out,
1261
+ filter 200ms ease-out;
1262
+ }
1263
+
1189
1264
  /* ─────────────────────────────────────────────────────────────────────
1190
1265
  Round 29 — prefers-reduced-motion a11y sweep
1191
1266
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.210",
3
+ "version": "0.5.3-preview.212",
4
4
  "description": "Agent Network Dashboard \u2014 Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,83 @@
1
+ /* Round 697 — chrome strip segmented-control wrappers (Layout /
2
+ * nodeSize / zoom containers) gain wrapper-level multi-layer halo
3
+ * via CSS :has(button:hover) on the 3 wrappers' data-attrs. Pre-R697
4
+ * only individual inner buttons halo'd (R667-R675 per-button); the
5
+ * parent wrappers stayed flat. R697 closes the chrome-strip "active
6
+ * control group" signal at the parent scope.
7
+ *
8
+ * Source assertions:
9
+ * - globals.css :has(button:hover) rule covers all 3 wrappers
10
+ * - globals.css transition rule for the 3 wrappers includes filter
11
+ * - TopoGraph.tsx Layout wrapper has data-topo-chrome-wrapper-halo-family="layout"
12
+ * - TopoGraph.tsx nodeSize wrapper has data-topo-chrome-wrapper-halo-family="nodesize"
13
+ * - TopoGraph.tsx zoom wrapper has data-topo-chrome-wrapper-halo-family="zoom"
14
+ *
15
+ * Runtime assertions:
16
+ * - all 3 wrappers present in DOM with halo-family data-attrs
17
+ */
18
+ import { chromium } from 'playwright';
19
+ import { readFileSync } from 'node:fs';
20
+
21
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
22
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
23
+
24
+ const browser = await chromium.launch({ headless: true });
25
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
26
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
27
+ await ctx.addInitScript(() => {
28
+ try {
29
+ localStorage.setItem('anet-theme', 'cyber');
30
+ localStorage.setItem('anet-topo-layout', 'ring');
31
+ sessionStorage.setItem('anet_v3_auth', '1');
32
+ } catch {}
33
+ });
34
+ await ctx.route('**/api/hub/status*', async (route) => {
35
+ const r = await route.fetch();
36
+ const b = await r.json();
37
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
38
+ const mk = (alias) => ({
39
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
40
+ network_id: nid, project_dir: null,
41
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
42
+ });
43
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
44
+ });
45
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
46
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
47
+ const page = await ctx.newPage();
48
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
49
+ await page.waitForSelector('[data-topo-chrome-wrapper-halo-family]', { timeout: 15000, state: 'attached' });
50
+ await page.waitForTimeout(300);
51
+
52
+ const runtimeState = await page.evaluate(() => {
53
+ const wrappers = Array.from(document.querySelectorAll('[data-topo-chrome-wrapper-halo-family]'));
54
+ return wrappers.map(w => w.getAttribute('data-topo-chrome-wrapper-halo-family')).sort();
55
+ });
56
+
57
+ await browser.close();
58
+
59
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
60
+ const tsxSrc = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
61
+
62
+ const cssHoverRule = /\[data-topo-chrome-layout-trailer\]:has\(button:hover\),[\s\S]*?\[data-topo-chrome-fleet-group-trailer\]:has\(button:hover\),[\s\S]*?\[data-topo-chrome-zoom-wrapper\]:has\(button:hover\)\s*\{[\s\S]*?drop-shadow\(0 0 2px rgba\(103, 232, 249, 0\.5\)\)[\s\S]*?drop-shadow\(0 0 4px rgba\(103, 232, 249, 0\.25\)\)/.test(cssSrc);
63
+ const cssTransition = /\[data-topo-chrome-layout-trailer\],[\s\S]*?\[data-topo-chrome-fleet-group-trailer\],[\s\S]*?\[data-topo-chrome-zoom-wrapper\]\s*\{[\s\S]*?transition:[\s\S]*?filter 200ms/.test(cssSrc);
64
+ const tsxLayoutAttr = /data-topo-chrome-wrapper-halo-family="layout"/.test(tsxSrc);
65
+ const tsxNodesizeAttr = /data-topo-chrome-wrapper-halo-family="nodesize"/.test(tsxSrc);
66
+ const tsxZoomAttr = /data-topo-chrome-wrapper-halo-family="zoom"/.test(tsxSrc);
67
+
68
+ const expectedFamilies = ['layout', 'nodesize', 'zoom'];
69
+
70
+ const results = {
71
+ wrappers_count: runtimeState.length === 3,
72
+ wrappers_families: JSON.stringify(runtimeState) === JSON.stringify(expectedFamilies),
73
+ css_hover_rule: cssHoverRule,
74
+ css_transition: cssTransition,
75
+ tsx_layout_attr: tsxLayoutAttr,
76
+ tsx_nodesize_attr: tsxNodesizeAttr,
77
+ tsx_zoom_attr: tsxZoomAttr,
78
+ };
79
+ const ok = Object.values(results).every(Boolean);
80
+ console.log(`${ok ? '✅' : '❌'} R697 chrome wrapper :has() multi-layer halo (53rd anchor — 3 wrappers via CSS rule):`,
81
+ JSON.stringify(results, null, 2),
82
+ `\n runtime families: ${JSON.stringify(runtimeState)}`);
83
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,93 @@
1
+ /* Round 698 — vendor-distribution chip-row outer wrapper joins the
2
+ * R697 wrapper-level :has() halo family. Pre-R698 only the chrome-strip
3
+ * wrappers (Layout/nodeSize/zoom) echoed inner-button hover at the
4
+ * parent scope. R698 extends to a NEW parent: the vendor-distribution
5
+ * chip-row outer <span>. Inner vendor letter chips are <span role="button">
6
+ * (not real <button>), so the CSS uses :has([role="button"]:hover) — a
7
+ * new selector variant extending R697's vocabulary from real-button
8
+ * children to ARIA-button children.
9
+ *
10
+ * Source assertions:
11
+ * - globals.css :has([role="button"]:hover) rule on wrapper attr
12
+ * - globals.css transition rule for the wrapper includes filter
13
+ * - TopoGraph.tsx outer <span> has data-topo-chrome-vendor-distribution-wrapper
14
+ *
15
+ * Runtime assertions:
16
+ * - wrapper present when vendorDist.length > 2 (3+ vendors)
17
+ * - data-attr matches "true"
18
+ *
19
+ * Mock 3 vendors so vendorDist.length > 2 triggers the chip row.
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 fresh = new Date(Date.now() - 60 * 1000).toISOString();
26
+
27
+ const browser = await chromium.launch({ headless: true });
28
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
29
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
30
+ await ctx.addInitScript(() => {
31
+ try {
32
+ localStorage.setItem('anet-theme', 'cyber');
33
+ localStorage.setItem('anet-topo-layout', 'ring');
34
+ sessionStorage.setItem('anet_v3_auth', '1');
35
+ } catch {}
36
+ });
37
+ await ctx.route('**/api/hub/status*', async (route) => {
38
+ const r = await route.fetch();
39
+ const b = await r.json();
40
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
41
+ const mk = (alias, model) => ({
42
+ alias, status: 'idle', model, runtime: 'claude-code-cli',
43
+ network_id: nid, project_dir: null,
44
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
45
+ });
46
+ // 3 distinct vendors → vendorDist.length === 3 → chip row renders.
47
+ await route.fulfill({ response: r, json: { ...b, sessions: [
48
+ mk('a·1', 'claude-opus-4'),
49
+ mk('a·2', 'gpt-5'),
50
+ mk('a·3', 'glm-4.6'),
51
+ ] } });
52
+ });
53
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
54
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
55
+ const page = await ctx.newPage();
56
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
57
+ await page.waitForSelector('[data-topo-chrome-vendor-distribution-wrapper]', { timeout: 15000, state: 'attached' });
58
+ await page.waitForTimeout(300);
59
+
60
+ const runtimeState = await page.evaluate(() => {
61
+ const wrapper = document.querySelector('[data-topo-chrome-vendor-distribution-wrapper]');
62
+ if (!wrapper) return null;
63
+ // Count inner role="button" children (the vendor letter chips).
64
+ const innerChips = wrapper.querySelectorAll('[role="button"]');
65
+ return {
66
+ wrapper_present: true,
67
+ wrapper_attr: wrapper.getAttribute('data-topo-chrome-vendor-distribution-wrapper'),
68
+ inner_role_button_count: innerChips.length,
69
+ };
70
+ });
71
+
72
+ await browser.close();
73
+
74
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
75
+ const tsxSrc = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
76
+
77
+ const cssHoverRule = /\[data-topo-chrome-vendor-distribution-wrapper\]:has\(\[role="button"\]:hover\)\s*\{[\s\S]*?drop-shadow\(0 0 2px rgba\(103, 232, 249, 0\.5\)\)[\s\S]*?drop-shadow\(0 0 4px rgba\(103, 232, 249, 0\.25\)\)/.test(cssSrc);
78
+ const cssTransition = /\[data-topo-chrome-vendor-distribution-wrapper\]\s*\{[\s\S]*?transition:[\s\S]*?filter 200ms/.test(cssSrc);
79
+ const tsxWrapperAttr = /data-topo-chrome-vendor-distribution-wrapper="true"/.test(tsxSrc);
80
+
81
+ const results = {
82
+ wrapper_present: !!runtimeState?.wrapper_present,
83
+ wrapper_attr_true: runtimeState?.wrapper_attr === 'true',
84
+ inner_chips_present: (runtimeState?.inner_role_button_count ?? 0) >= 3,
85
+ css_hover_rule: cssHoverRule,
86
+ css_transition: cssTransition,
87
+ tsx_wrapper_attr: tsxWrapperAttr,
88
+ };
89
+ const ok = Object.values(results).every(Boolean);
90
+ console.log(`${ok ? '✅' : '❌'} R698 vendor-distribution wrapper :has() multi-layer halo (54th anchor — 2nd wrapper-level :has() anchor):`,
91
+ JSON.stringify(results, null, 2),
92
+ `\n runtime: ${JSON.stringify(runtimeState)}`);
93
+ process.exit(ok ? 0 : 1);