@sleep2agi/agent-network-dashboard 0.5.3-preview.74 → 0.5.3-preview.76

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 (155) 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 +2 -2
  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/{0nen2q__0xj5y.js → 02c-y-wnaqfko.js} +1 -1
  143. package/.next/static/chunks/{0kn6uw7kdzqmb.js → 08wot-nqxohck.js} +1 -1
  144. package/.next/static/chunks/{0dl7n87ozjehm.css → 0l0qml9uwy7fm.css} +1 -1
  145. package/.next/static/chunks/{0pse5n51pfgmp.js → 0vlz~vgcjzz00.js} +1 -1
  146. package/.next/static/chunks/{04ty1y7vqj51_.js → 0zdzl-bc3bggd.js} +2 -2
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +94 -8
  150. package/package.json +1 -1
  151. package/scripts/topo-group-label-member-alias-hover-test.mjs +125 -0
  152. package/scripts/topo-legend-swatch-member-alias-match-test.mjs +139 -0
  153. /package/.next/static/{-Ap6mdNr338P4dKzUWI9f → JETu37K-Slnu1KFPrpLjy}/_buildManifest.js +0 -0
  154. /package/.next/static/{-Ap6mdNr338P4dKzUWI9f → JETu37K-Slnu1KFPrpLjy}/_clientMiddlewareManifest.js +0 -0
  155. /package/.next/static/{-Ap6mdNr338P4dKzUWI9f → JETu37K-Slnu1KFPrpLjy}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":252,"timestamp":222546429476,"id":4,"parentId":1,"tags":{},"startTime":1779030518676,"traceId":"a3663256e18c5940"},{"name":"load-custom-routes","duration":511,"timestamp":222546429878,"id":5,"parentId":1,"tags":{},"startTime":1779030518676,"traceId":"a3663256e18c5940"},{"name":"create-dist-dir","duration":686,"timestamp":222546430431,"id":6,"parentId":1,"tags":{},"startTime":1779030518677,"traceId":"a3663256e18c5940"},{"name":"clean","duration":31024,"timestamp":222546431773,"id":7,"parentId":1,"tags":{},"startTime":1779030518678,"traceId":"a3663256e18c5940"},{"name":"discover-routes","duration":10256,"timestamp":222546541099,"id":8,"parentId":1,"tags":{},"startTime":1779030518787,"traceId":"a3663256e18c5940"},{"name":"create-root-mapping","duration":110,"timestamp":222546551410,"id":9,"parentId":1,"tags":{},"startTime":1779030518798,"traceId":"a3663256e18c5940"},{"name":"generate-route-types","duration":36571,"timestamp":222546554054,"id":10,"parentId":1,"tags":{},"startTime":1779030518800,"traceId":"a3663256e18c5940"},{"name":"public-dir-conflict-check","duration":97,"timestamp":222546590715,"id":11,"parentId":1,"tags":{},"startTime":1779030518837,"traceId":"a3663256e18c5940"},{"name":"generate-routes-manifest","duration":5050,"timestamp":222546590943,"id":12,"parentId":1,"tags":{},"startTime":1779030518837,"traceId":"a3663256e18c5940"},{"name":"run-turbopack","duration":5969926,"timestamp":222546601372,"id":14,"parentId":1,"tags":{},"startTime":1779030518848,"traceId":"a3663256e18c5940"},{"name":"turbopack-build-events","duration":71,"timestamp":222546898262,"id":15,"parentId":1,"tags":{},"startTime":1779030519145,"traceId":"a3663256e18c5940"},{"name":"run-typescript","duration":9408453,"timestamp":222552581811,"id":16,"parentId":1,"tags":{},"startTime":1779030524828,"traceId":"a3663256e18c5940"},{"name":"generate-required-server-files","duration":2472,"timestamp":222561991437,"id":18,"parentId":1,"tags":{},"startTime":1779030534238,"traceId":"a3663256e18c5940"},{"name":"check-static-error-page","duration":16708,"timestamp":222562162224,"id":20,"parentId":19,"tags":{},"startTime":1779030534409,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":531531,"timestamp":222562182783,"id":65,"parentId":22,"tags":{},"startTime":1779030534429,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":548973,"timestamp":222562165500,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779030534412,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":579555,"timestamp":222562182901,"id":66,"parentId":25,"tags":{},"startTime":1779030534429,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":593898,"timestamp":222562168660,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779030534415,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":600266,"timestamp":222562183202,"id":69,"parentId":28,"tags":{},"startTime":1779030534429,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":614357,"timestamp":222562169198,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779030534415,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":605810,"timestamp":222562183970,"id":73,"parentId":33,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":619758,"timestamp":222562170107,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779030534416,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":614519,"timestamp":222562183768,"id":72,"parentId":32,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":628439,"timestamp":222562169931,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779030534416,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":635117,"timestamp":222562181422,"id":64,"parentId":21,"tags":{},"startTime":1779030534428,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":652830,"timestamp":222562163787,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779030534410,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":636545,"timestamp":222562184084,"id":74,"parentId":34,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":650327,"timestamp":222562170366,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779030534417,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":645513,"timestamp":222562182986,"id":67,"parentId":26,"tags":{},"startTime":1779030534429,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":659707,"timestamp":222562168846,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779030534415,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":644787,"timestamp":222562184118,"id":75,"parentId":35,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":658416,"timestamp":222562170542,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779030534417,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":645698,"timestamp":222562183507,"id":70,"parentId":29,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":659907,"timestamp":222562169331,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779030534416,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":649854,"timestamp":222562184206,"id":79,"parentId":39,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":661866,"timestamp":222562172236,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779030534419,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":664173,"timestamp":222562184176,"id":77,"parentId":37,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":676988,"timestamp":222562171418,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779030534418,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":664922,"timestamp":222562183692,"id":71,"parentId":30,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":679167,"timestamp":222562169484,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779030534416,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":664757,"timestamp":222562184235,"id":81,"parentId":42,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":676304,"timestamp":222562172770,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779030534419,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":681254,"timestamp":222562184265,"id":83,"parentId":45,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":692102,"timestamp":222562173471,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779030534420,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":681474,"timestamp":222562184221,"id":80,"parentId":40,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":693364,"timestamp":222562172359,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779030534419,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":681658,"timestamp":222562184194,"id":78,"parentId":38,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":693808,"timestamp":222562172088,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779030534418,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":682477,"timestamp":222562184280,"id":84,"parentId":46,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":693207,"timestamp":222562173597,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779030534420,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":685732,"timestamp":222562184253,"id":82,"parentId":44,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":696728,"timestamp":222562173317,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779030534420,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":692572,"timestamp":222562184297,"id":85,"parentId":47,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":702640,"timestamp":222562174273,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779030534421,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":693948,"timestamp":222562183122,"id":68,"parentId":27,"tags":{},"startTime":1779030534429,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":708116,"timestamp":222562168985,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779030534415,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":692859,"timestamp":222562184348,"id":88,"parentId":50,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":701184,"timestamp":222562176045,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779030534422,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":697281,"timestamp":222562184312,"id":86,"parentId":48,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":707229,"timestamp":222562174406,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779030534421,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":688608,"timestamp":222562197699,"id":92,"parentId":41,"tags":{},"startTime":1779030534444,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":713869,"timestamp":222562172479,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779030534419,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":691645,"timestamp":222562199020,"id":93,"parentId":43,"tags":{},"startTime":1779030534445,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":717739,"timestamp":222562172968,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779030534419,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":698363,"timestamp":222562192504,"id":90,"parentId":24,"tags":{},"startTime":1779030534439,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":724808,"timestamp":222562166091,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779030534412,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":709224,"timestamp":222562184363,"id":89,"parentId":51,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":717497,"timestamp":222562176137,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779030534422,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":710044,"timestamp":222562184329,"id":87,"parentId":49,"tags":{},"startTime":1779030534431,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":718570,"timestamp":222562175844,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779030534422,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":719057,"timestamp":222562184138,"id":76,"parentId":36,"tags":{},"startTime":1779030534430,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":732031,"timestamp":222562171221,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779030534417,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":712598,"timestamp":222562205937,"id":99,"parentId":56,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":741545,"timestamp":222562177040,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779030534423,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":731479,"timestamp":222562193725,"id":91,"parentId":31,"tags":{},"startTime":1779030534440,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":755637,"timestamp":222562169619,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779030534416,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":721618,"timestamp":222562205953,"id":100,"parentId":58,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":749967,"timestamp":222562177650,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779030534424,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":727246,"timestamp":222562208146,"id":102,"parentId":61,"tags":{},"startTime":1779030534454,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":757140,"timestamp":222562178334,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779030534425,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":743297,"timestamp":222562205909,"id":97,"parentId":54,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":772556,"timestamp":222562176696,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779030534423,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":741570,"timestamp":222562208182,"id":103,"parentId":62,"tags":{},"startTime":1779030534454,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":771301,"timestamp":222562178497,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779030534425,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":747106,"timestamp":222562205811,"id":94,"parentId":23,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":787173,"timestamp":222562165792,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779030534412,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":747486,"timestamp":222562205873,"id":95,"parentId":52,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":776954,"timestamp":222562176444,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779030534423,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":731690,"timestamp":222562224791,"id":105,"parentId":60,"tags":{},"startTime":1779030534471,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":778566,"timestamp":222562177954,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779030534424,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":748391,"timestamp":222562208200,"id":104,"parentId":63,"tags":{},"startTime":1779030534454,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":777952,"timestamp":222562178656,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779030534425,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":753941,"timestamp":222562205920,"id":98,"parentId":55,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":783067,"timestamp":222562176844,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779030534423,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":710436,"timestamp":222562250623,"id":106,"parentId":57,"tags":{},"startTime":1779030534497,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":783876,"timestamp":222562177231,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779030534424,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":756197,"timestamp":222562205892,"id":96,"parentId":53,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":785544,"timestamp":222562176582,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779030534423,"traceId":"a3663256e18c5940"},{"name":"is-page-static","duration":777265,"timestamp":222562206114,"id":101,"parentId":59,"tags":{},"startTime":1779030534452,"traceId":"a3663256e18c5940"},{"name":"check-page","duration":805608,"timestamp":222562177807,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779030534424,"traceId":"a3663256e18c5940"},{"name":"static-check","duration":822414,"timestamp":222562161045,"id":19,"parentId":1,"tags":{},"startTime":1779030534407,"traceId":"a3663256e18c5940"}]
2
- [{"name":"write-routes-manifest","duration":522,"timestamp":222562992227,"id":108,"parentId":1,"tags":{},"startTime":1779030535239,"traceId":"a3663256e18c5940"},{"name":"load-dotenv","duration":61,"timestamp":222563002976,"id":111,"parentId":110,"tags":{},"startTime":1779030535249,"traceId":"a3663256e18c5940"},{"name":"run-export-path-map","duration":542,"timestamp":222563005683,"id":112,"parentId":110,"tags":{},"startTime":1779030535252,"traceId":"a3663256e18c5940"},{"name":"next-export","duration":582776,"timestamp":222563001786,"id":110,"parentId":1,"tags":{},"startTime":1779030535248,"traceId":"a3663256e18c5940"},{"name":"move-exported-app-not-found-","duration":558,"timestamp":222563587773,"id":113,"parentId":109,"tags":{},"startTime":1779030535834,"traceId":"a3663256e18c5940"},{"name":"move-exported-app-global-error-","duration":621,"timestamp":222563588433,"id":114,"parentId":109,"tags":{},"startTime":1779030535835,"traceId":"a3663256e18c5940"},{"name":"static-generation","duration":594636,"timestamp":222562996468,"id":109,"parentId":1,"tags":{},"startTime":1779030535243,"traceId":"a3663256e18c5940"},{"name":"write-routes-manifest","duration":611,"timestamp":222563591414,"id":115,"parentId":1,"tags":{},"startTime":1779030535838,"traceId":"a3663256e18c5940"},{"name":"print-tree-view","duration":4090,"timestamp":222563607725,"id":116,"parentId":1,"tags":{},"startTime":1779030535854,"traceId":"a3663256e18c5940"},{"name":"write-route-bundle-stats","duration":13360,"timestamp":222563611857,"id":117,"parentId":1,"tags":{},"startTime":1779030535858,"traceId":"a3663256e18c5940"},{"name":"telemetry-flush","duration":72139,"timestamp":222563625243,"id":118,"parentId":1,"tags":{},"startTime":1779030535872,"traceId":"a3663256e18c5940"},{"name":"next-build","duration":17318906,"timestamp":222546378511,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779030518625,"traceId":"a3663256e18c5940"}]
1
+ [{"name":"generate-buildid","duration":319,"timestamp":223566401661,"id":4,"parentId":1,"tags":{},"startTime":1779031538648,"traceId":"cc1ad07771d74b0b"},{"name":"load-custom-routes","duration":514,"timestamp":223566402143,"id":5,"parentId":1,"tags":{},"startTime":1779031538648,"traceId":"cc1ad07771d74b0b"},{"name":"create-dist-dir","duration":734,"timestamp":223566402702,"id":6,"parentId":1,"tags":{},"startTime":1779031538649,"traceId":"cc1ad07771d74b0b"},{"name":"clean","duration":34196,"timestamp":223566404134,"id":7,"parentId":1,"tags":{},"startTime":1779031538650,"traceId":"cc1ad07771d74b0b"},{"name":"discover-routes","duration":10383,"timestamp":223566522258,"id":8,"parentId":1,"tags":{},"startTime":1779031538769,"traceId":"cc1ad07771d74b0b"},{"name":"create-root-mapping","duration":165,"timestamp":223566532718,"id":9,"parentId":1,"tags":{},"startTime":1779031538779,"traceId":"cc1ad07771d74b0b"},{"name":"generate-route-types","duration":26356,"timestamp":223566535678,"id":10,"parentId":1,"tags":{},"startTime":1779031538782,"traceId":"cc1ad07771d74b0b"},{"name":"public-dir-conflict-check","duration":194,"timestamp":223566562151,"id":11,"parentId":1,"tags":{},"startTime":1779031538808,"traceId":"cc1ad07771d74b0b"},{"name":"generate-routes-manifest","duration":6073,"timestamp":223566562539,"id":12,"parentId":1,"tags":{},"startTime":1779031538809,"traceId":"cc1ad07771d74b0b"},{"name":"run-turbopack","duration":8036429,"timestamp":223566592380,"id":14,"parentId":1,"tags":{},"startTime":1779031538839,"traceId":"cc1ad07771d74b0b"},{"name":"turbopack-build-events","duration":109,"timestamp":223566920418,"id":15,"parentId":1,"tags":{},"startTime":1779031539167,"traceId":"cc1ad07771d74b0b"},{"name":"run-typescript","duration":12213767,"timestamp":223574646259,"id":16,"parentId":1,"tags":{},"startTime":1779031546893,"traceId":"cc1ad07771d74b0b"},{"name":"generate-required-server-files","duration":2557,"timestamp":223586861487,"id":18,"parentId":1,"tags":{},"startTime":1779031559108,"traceId":"cc1ad07771d74b0b"},{"name":"check-static-error-page","duration":17483,"timestamp":223587082160,"id":20,"parentId":19,"tags":{},"startTime":1779031559328,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":641686,"timestamp":223587103984,"id":64,"parentId":21,"tags":{},"startTime":1779031559350,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":662010,"timestamp":223587083828,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779031559330,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":645125,"timestamp":223587104643,"id":67,"parentId":26,"tags":{},"startTime":1779031559351,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":660607,"timestamp":223587089232,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779031559336,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":650965,"timestamp":223587105322,"id":72,"parentId":32,"tags":{},"startTime":1779031559352,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":666170,"timestamp":223587090187,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779031559336,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":685553,"timestamp":223587104403,"id":65,"parentId":22,"tags":{},"startTime":1779031559351,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":704417,"timestamp":223587085654,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779031559332,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":687264,"timestamp":223587105461,"id":73,"parentId":33,"tags":{},"startTime":1779031559352,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":702476,"timestamp":223587090317,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779031559337,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":689303,"timestamp":223587105122,"id":70,"parentId":29,"tags":{},"startTime":1779031559351,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":704866,"timestamp":223587089611,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779031559336,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":693829,"timestamp":223587104842,"id":69,"parentId":28,"tags":{},"startTime":1779031559351,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":709230,"timestamp":223587089489,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779031559336,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":699555,"timestamp":223587108493,"id":76,"parentId":36,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":717017,"timestamp":223587091090,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779031559337,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":708508,"timestamp":223587108450,"id":75,"parentId":35,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":726457,"timestamp":223587090579,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779031559337,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":725061,"timestamp":223587108551,"id":79,"parentId":39,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":742119,"timestamp":223587091551,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779031559338,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":733943,"timestamp":223587108560,"id":80,"parentId":40,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":750887,"timestamp":223587091680,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779031559338,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":743115,"timestamp":223587108572,"id":81,"parentId":42,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":759694,"timestamp":223587092083,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779031559338,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":744497,"timestamp":223587108539,"id":78,"parentId":38,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":761652,"timestamp":223587091438,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779031559338,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":747971,"timestamp":223587108584,"id":82,"parentId":44,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":764121,"timestamp":223587092476,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779031559339,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":749045,"timestamp":223587108523,"id":77,"parentId":37,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":766317,"timestamp":223587091295,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779031559338,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":753065,"timestamp":223587108605,"id":84,"parentId":46,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":768995,"timestamp":223587092718,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779031559339,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":755491,"timestamp":223587108620,"id":85,"parentId":47,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":769772,"timestamp":223587094402,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779031559341,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":761264,"timestamp":223587105261,"id":71,"parentId":30,"tags":{},"startTime":1779031559352,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":776867,"timestamp":223587089765,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779031559336,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":758182,"timestamp":223587108633,"id":86,"parentId":48,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":772322,"timestamp":223587094530,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779031559341,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":761957,"timestamp":223587108641,"id":87,"parentId":49,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":775989,"timestamp":223587094656,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779031559341,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":770200,"timestamp":223587108654,"id":88,"parentId":50,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":784166,"timestamp":223587094751,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779031559341,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":762174,"timestamp":223587116981,"id":90,"parentId":24,"tags":{},"startTime":1779031559363,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":792937,"timestamp":223587086260,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779031559333,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":771280,"timestamp":223587108667,"id":89,"parentId":51,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":785162,"timestamp":223587094833,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779031559341,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":766173,"timestamp":223587118156,"id":91,"parentId":31,"tags":{},"startTime":1779031559364,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":794479,"timestamp":223587089888,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779031559336,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":765751,"timestamp":223587124314,"id":93,"parentId":43,"tags":{},"startTime":1779031559371,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":797893,"timestamp":223587092217,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779031559338,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":770519,"timestamp":223587122944,"id":92,"parentId":41,"tags":{},"startTime":1779031559369,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":801715,"timestamp":223587091795,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779031559338,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":760190,"timestamp":223587134087,"id":94,"parentId":23,"tags":{},"startTime":1779031559380,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":808348,"timestamp":223587085966,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779031559332,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":767424,"timestamp":223587134148,"id":97,"parentId":54,"tags":{},"startTime":1779031559380,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":806011,"timestamp":223587095599,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779031559342,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":775181,"timestamp":223587134162,"id":98,"parentId":55,"tags":{},"startTime":1779031559380,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":813574,"timestamp":223587095809,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779031559342,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":800964,"timestamp":223587108592,"id":83,"parentId":45,"tags":{},"startTime":1779031559355,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":816990,"timestamp":223587092605,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779031559339,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":782507,"timestamp":223587134178,"id":99,"parentId":56,"tags":{},"startTime":1779031559380,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":820670,"timestamp":223587096063,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779031559342,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":820498,"timestamp":223587104530,"id":66,"parentId":25,"tags":{},"startTime":1779031559351,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":836024,"timestamp":223587089057,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779031559335,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":794017,"timestamp":223587134314,"id":101,"parentId":59,"tags":{},"startTime":1779031559381,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":831279,"timestamp":223587097115,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779031559343,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":842723,"timestamp":223587105538,"id":74,"parentId":34,"tags":{},"startTime":1779031559352,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":857869,"timestamp":223587090455,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779031559337,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":814119,"timestamp":223587134354,"id":103,"parentId":62,"tags":{},"startTime":1779031559381,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":849274,"timestamp":223587099227,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779031559346,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":793285,"timestamp":223587162669,"id":105,"parentId":57,"tags":{},"startTime":1779031559409,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":859719,"timestamp":223587096312,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779031559343,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":857360,"timestamp":223587104745,"id":68,"parentId":27,"tags":{},"startTime":1779031559351,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":872797,"timestamp":223587089357,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779031559336,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":788657,"timestamp":223587177559,"id":106,"parentId":60,"tags":{},"startTime":1779031559424,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":868955,"timestamp":223587097302,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779031559344,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":836299,"timestamp":223587134121,"id":95,"parentId":52,"tags":{},"startTime":1779031559380,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":875206,"timestamp":223587095269,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779031559342,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":846450,"timestamp":223587134138,"id":96,"parentId":53,"tags":{},"startTime":1779031559380,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":885199,"timestamp":223587095447,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779031559342,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":873988,"timestamp":223587134338,"id":102,"parentId":61,"tags":{},"startTime":1779031559381,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":909352,"timestamp":223587099048,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779031559345,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":876520,"timestamp":223587134193,"id":100,"parentId":58,"tags":{},"startTime":1779031559380,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":913887,"timestamp":223587096889,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779031559343,"traceId":"cc1ad07771d74b0b"},{"name":"is-page-static","duration":924261,"timestamp":223587134364,"id":104,"parentId":63,"tags":{},"startTime":1779031559381,"traceId":"cc1ad07771d74b0b"},{"name":"check-page","duration":959304,"timestamp":223587099384,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779031559346,"traceId":"cc1ad07771d74b0b"},{"name":"static-check","duration":977808,"timestamp":223587080913,"id":19,"parentId":1,"tags":{},"startTime":1779031559327,"traceId":"cc1ad07771d74b0b"}]
2
+ [{"name":"write-routes-manifest","duration":662,"timestamp":223588068721,"id":108,"parentId":1,"tags":{},"startTime":1779031560315,"traceId":"cc1ad07771d74b0b"},{"name":"load-dotenv","duration":73,"timestamp":223588084409,"id":111,"parentId":110,"tags":{},"startTime":1779031560331,"traceId":"cc1ad07771d74b0b"},{"name":"run-export-path-map","duration":1053,"timestamp":223588087734,"id":112,"parentId":110,"tags":{},"startTime":1779031560334,"traceId":"cc1ad07771d74b0b"},{"name":"next-export","duration":778006,"timestamp":223588082538,"id":110,"parentId":1,"tags":{},"startTime":1779031560329,"traceId":"cc1ad07771d74b0b"},{"name":"move-exported-app-not-found-","duration":472,"timestamp":223588864278,"id":113,"parentId":109,"tags":{},"startTime":1779031561111,"traceId":"cc1ad07771d74b0b"},{"name":"move-exported-app-global-error-","duration":344,"timestamp":223588864844,"id":114,"parentId":109,"tags":{},"startTime":1779031561111,"traceId":"cc1ad07771d74b0b"},{"name":"static-generation","duration":793481,"timestamp":223588073760,"id":109,"parentId":1,"tags":{},"startTime":1779031560320,"traceId":"cc1ad07771d74b0b"},{"name":"write-routes-manifest","duration":537,"timestamp":223588867533,"id":115,"parentId":1,"tags":{},"startTime":1779031561114,"traceId":"cc1ad07771d74b0b"},{"name":"print-tree-view","duration":6794,"timestamp":223588887797,"id":116,"parentId":1,"tags":{},"startTime":1779031561134,"traceId":"cc1ad07771d74b0b"},{"name":"write-route-bundle-stats","duration":14561,"timestamp":223588894637,"id":117,"parentId":1,"tags":{},"startTime":1779031561141,"traceId":"cc1ad07771d74b0b"},{"name":"telemetry-flush","duration":22165,"timestamp":223588909252,"id":118,"parentId":1,"tags":{},"startTime":1779031561156,"traceId":"cc1ad07771d74b0b"},{"name":"next-build","duration":22584353,"timestamp":223566347123,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779031538593,"traceId":"cc1ad07771d74b0b"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5969926,"timestamp":222546601372,"id":14,"parentId":1,"tags":{},"startTime":1779030518848,"traceId":"a3663256e18c5940"},{"name":"turbopack-build-events","duration":71,"timestamp":222546898262,"id":15,"parentId":1,"tags":{},"startTime":1779030519145,"traceId":"a3663256e18c5940"},{"name":"run-typescript","duration":9408453,"timestamp":222552581811,"id":16,"parentId":1,"tags":{},"startTime":1779030524828,"traceId":"a3663256e18c5940"},{"name":"static-check","duration":822414,"timestamp":222562161045,"id":19,"parentId":1,"tags":{},"startTime":1779030534407,"traceId":"a3663256e18c5940"},{"name":"static-generation","duration":594636,"timestamp":222562996468,"id":109,"parentId":1,"tags":{},"startTime":1779030535243,"traceId":"a3663256e18c5940"},{"name":"telemetry-flush","duration":72139,"timestamp":222563625243,"id":118,"parentId":1,"tags":{},"startTime":1779030535872,"traceId":"a3663256e18c5940"},{"name":"next-build","duration":17318906,"timestamp":222546378511,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779030518625,"traceId":"a3663256e18c5940"}]
1
+ [{"name":"run-turbopack","duration":8036429,"timestamp":223566592380,"id":14,"parentId":1,"tags":{},"startTime":1779031538839,"traceId":"cc1ad07771d74b0b"},{"name":"turbopack-build-events","duration":109,"timestamp":223566920418,"id":15,"parentId":1,"tags":{},"startTime":1779031539167,"traceId":"cc1ad07771d74b0b"},{"name":"run-typescript","duration":12213767,"timestamp":223574646259,"id":16,"parentId":1,"tags":{},"startTime":1779031546893,"traceId":"cc1ad07771d74b0b"},{"name":"static-check","duration":977808,"timestamp":223587080913,"id":19,"parentId":1,"tags":{},"startTime":1779031559327,"traceId":"cc1ad07771d74b0b"},{"name":"static-generation","duration":793481,"timestamp":223588073760,"id":109,"parentId":1,"tags":{},"startTime":1779031560320,"traceId":"cc1ad07771d74b0b"},{"name":"telemetry-flush","duration":22165,"timestamp":223588909252,"id":118,"parentId":1,"tags":{},"startTime":1779031561156,"traceId":"cc1ad07771d74b0b"},{"name":"next-build","duration":22584353,"timestamp":223566347123,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779031538593,"traceId":"cc1ad07771d74b0b"}]
@@ -5211,6 +5211,30 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5211
5211
  a node click. Restrained dashed container + group-name label. */}
5212
5212
  {groupBoxes.map((box, boxIdx) => {
5213
5213
  const isHovered = activeGroup === box.key;
5214
+ /* Round 561 / Loop — inspection-overrides-encoding family
5215
+ 4th anchor. When operator hovers a NODE ALIAS on the
5216
+ canvas, the group-label that CONTAINS that node lifts
5217
+ to full opacity, signalling "this is the cluster
5218
+ whose member you're inspecting".
5219
+ Family progression (4 anchors now):
5220
+ R484 recent-row timestamp brightens on alias hover
5221
+ R485 edge particle opacity lifts on alias hover
5222
+ R486 minimap dot opacity lifts on alias hover
5223
+ R561 group-label opacity lifts on member-alias hover ← this round
5224
+ Pure paint axis (opacity only) — same restraint as
5225
+ R486. NOT bundled into the existing `isHovered` flag
5226
+ so the marching-ants live animation (gated on
5227
+ `!isPinned && !isHovered`) keeps running; the box
5228
+ rect stroke widen / fill brighten / letter-spacing
5229
+ / filter glow gates stay tied to direct label
5230
+ hover/pin semantics.
5231
+ Mirror of R486's pattern: `hoveredAlias === s.alias`
5232
+ extends a focused opacity branch independent from
5233
+ the rest-state encoding (online/offline). R561 here:
5234
+ `groupKeys[hoveredAlias] === box.key` extends a
5235
+ cluster-awareness opacity branch independent from
5236
+ the existing isHovered / isPinned semantics. */
5237
+ const isMemberAliasHovered = !!hoveredAlias && groupKeys[hoveredAlias] === box.key;
5214
5238
  // R68: distinguish "locked by click" from "currently hovered".
5215
5239
  // R63 made pinned and hovered identical (both hit isHovered
5216
5240
  // via activeGroup). A user with one team pinned should see at
@@ -5452,10 +5476,29 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5452
5476
  // motion layers (hub / ring / group) keep a coherent
5453
5477
  // tempo grammar. Default 12s when working=0 doesn't
5454
5478
  // matter — the className is only applied when working>0.
5455
- data-group-box-live={!isPinned && !isHovered && box.statuses.working > 0 ? 'true' : 'false'}
5479
+ /* Round 561 marching-ants gate refined to halt only
5480
+ on direct-label-hover (or pin), NOT on member-alias-
5481
+ hover. Pre-R561 `isHovered` covered BOTH cases via
5482
+ the line 1044 fallback `hoveredGroup ?? (hoveredAlias
5483
+ → groupKeys[hoveredAlias])` — so hovering ANY member
5484
+ node halted the ants, treating indirect inspection
5485
+ the same as direct attention.
5486
+ R561 differentiates: ants now keep running during
5487
+ member-alias hover (indirect / cluster-awareness
5488
+ inspection), halting ONLY on direct label hover or
5489
+ pin. The cluster's live signal stays alive while
5490
+ operator inspects member nodes — distinct visual
5491
+ telegraph for "directly attending this cluster"
5492
+ vs "inspecting one of its members".
5493
+ Gate uses `hoveredGroupLabel === box.key` directly
5494
+ (the LABEL hover state) instead of `isHovered`
5495
+ (which combines label-hover + member-alias-hover
5496
+ via activeGroup). data-group-box-live + the live
5497
+ className both flip on the same refined gate. */
5498
+ data-group-box-live={!isPinned && hoveredGroupLabel !== box.key && box.statuses.working > 0 ? 'true' : 'false'}
5456
5499
  data-group-box-march-dur={marchDur}
5457
5500
  data-group-box-lifted={(isPinned || isHovered) ? 'true' : 'false'}
5458
- className={!isPinned && !isHovered && box.statuses.working > 0 ? 'anet-topo-groupbox-live' : undefined}
5501
+ className={!isPinned && hoveredGroupLabel !== box.key && box.statuses.working > 0 ? 'anet-topo-groupbox-live' : undefined}
5459
5502
  // R142: drop-shadow filter when pinned or hovered. Box
5460
5503
  // visually "rises off the canvas" — same vocabulary
5461
5504
  // R18 KPI cards + R135 overlay panels use. Idle group
@@ -5762,9 +5805,18 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5762
5805
  (currently opacity 0.55 → 1 was snapping).
5763
5806
  data-group-label-opacity attr exposes the resolved
5764
5807
  value for tests. */
5765
- opacity={isPinned || isHovered ? 1 : box.isOrphan ? 0.4 : 0.55}
5766
- data-group-label-opacity={isPinned || isHovered ? 1 : box.isOrphan ? 0.4 : 0.55}
5808
+ /* Round 561 opacity ladder gains inspection-
5809
+ overrides-encoding branch via isMemberAliasHovered.
5810
+ Resolution order (most-emphatic first):
5811
+ isPinned || isHovered → 1 (direct attention)
5812
+ isMemberAliasHovered → 1 (R561 inspection)
5813
+ box.isOrphan → 0.4 (R551 orphan rest)
5814
+ (default) → 0.55
5815
+ R484/R485/R486-family mirror. */
5816
+ opacity={isPinned || isHovered || isMemberAliasHovered ? 1 : box.isOrphan ? 0.4 : 0.55}
5817
+ data-group-label-opacity={isPinned || isHovered || isMemberAliasHovered ? 1 : box.isOrphan ? 0.4 : 0.55}
5767
5818
  data-group-label-hovered={isHovered && !isPinned ? 'true' : 'false'}
5819
+ data-group-label-member-alias-hovered={isMemberAliasHovered ? 'true' : 'false'}
5768
5820
  data-group-label-font-weight={isPinned ? '800' : '700'}
5769
5821
  /* Round 479 / Loop — extend drop-shadow visual-polish
5770
5822
  family to a 4th anchor: group-label parent text
@@ -11545,6 +11597,34 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
11545
11597
  const isPinned = pinnedStatus === row.key;
11546
11598
  const isRowHovered = hoveredStatus === row.key;
11547
11599
  const isLifted = isRowHovered || isPinned;
11600
+ /* Round 562 / Loop — inspection-overrides-encoding family
11601
+ 5th anchor at the legend-swatch scope. When operator
11602
+ hovers a NODE ALIAS on the canvas, the legend swatch
11603
+ that matches that node's status tier lifts r + drop-
11604
+ shadow (R197 + R537 axes) — telegraphing "your
11605
+ inspected node is in this status group".
11606
+ Mirror of R486 minimap-dot inspection-override at the
11607
+ legend-swatch scope.
11608
+ Family progression (5 anchors):
11609
+ R484 recent-row timestamp on alias hover
11610
+ R485 edge particle opacity on alias hover
11611
+ R486 minimap dot opacity to 1.0 on alias hover
11612
+ R561 group-label opacity-1 + ants-gate refinement
11613
+ R562 legend-swatch r+glow on member-alias-matching ← this round
11614
+ Restraint: ONLY swatch lifts, NOT label/fill/ls/fw
11615
+ axes. Direct row-hover gets full treatment; inspection
11616
+ signal gets swatch-only lift — distinct "lighter"
11617
+ visual register matching R561's ants-gate approach
11618
+ (indirect inspection ≠ direct attention). */
11619
+ const hoveredSession = hoveredAlias
11620
+ ? (onlineNodes.find(s => s.alias === hoveredAlias) ?? offlineNodes.find(s => s.alias === hoveredAlias))
11621
+ : null;
11622
+ const hoveredAliasRowKey: 'working' | 'idle' | 'offline' | null = !hoveredSession ? null
11623
+ : hoveredSession.status === 'working' ? 'working'
11624
+ : offlineNodes.includes(hoveredSession) ? 'offline'
11625
+ : 'idle';
11626
+ const isMemberAliasMatching = hoveredAliasRowKey === row.key;
11627
+ const isSwatchLifted = isLifted || isMemberAliasMatching;
11548
11628
  return (
11549
11629
  <g
11550
11630
  key={row.key}
@@ -11704,11 +11784,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
11704
11784
  r="6"
11705
11785
  fill={row.fill}
11706
11786
  data-legend-swatch={row.key}
11707
- data-legend-swatch-state={isPinned ? 'pinned' : isRowHovered ? 'hover' : 'idle'}
11708
- data-legend-swatch-glow={(isRowHovered || isPinned) ? 'true' : 'false'}
11787
+ data-legend-swatch-state={isPinned ? 'pinned' : isRowHovered ? 'hover' : isMemberAliasMatching ? 'member-alias-matching' : 'idle'}
11788
+ data-legend-swatch-glow={isSwatchLifted ? 'true' : 'false'}
11789
+ data-legend-swatch-member-alias-matching={isMemberAliasMatching ? 'true' : 'false'}
11709
11790
  style={{
11710
- r: isRowHovered || isPinned ? '7px' : '6px',
11711
- filter: (isRowHovered || isPinned)
11791
+ /* R562: swatch lifts on direct row hover, pin, OR
11792
+ member-alias-matching (operator inspecting a node
11793
+ whose status matches this row's tier). Pure paint
11794
+ + geometry axes — label/fill/ls/fw stay tied to
11795
+ direct row-hover semantics. */
11796
+ r: isSwatchLifted ? '7px' : '6px',
11797
+ filter: isSwatchLifted
11712
11798
  ? `drop-shadow(0 0 3px ${row.fill}99)`
11713
11799
  : undefined,
11714
11800
  transition: 'r 150ms ease-out, filter 150ms ease-out',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.74",
3
+ "version": "0.5.3-preview.76",
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,125 @@
1
+ /* Round 561 verification: group-label opacity lifts to 1.0 when
2
+ * operator hovers a NODE ALIAS that's a member of this group.
3
+ * 4th anchor in the inspection-overrides-encoding family.
4
+ *
5
+ * Mock: 3 'alpha-' prefix sessions (1 group) + 3 standalone
6
+ * (orphan band). Hover the alpha-1 node → group 'alpha·' label
7
+ * should lift opacity 0.55 → 1.0.
8
+ *
9
+ * Test phases:
10
+ * 1. confirm grid layout active
11
+ * 2. rest: group 'alpha·' opacity = 0.55
12
+ * 3. hover a node from alpha group → 'alpha·' opacity = 1.0,
13
+ * member-alias-hovered attr = 'true'
14
+ * 4. orphan group should NOT lift (its members aren't hovered)
15
+ * 5. source-side regex confirms wiring
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 fresh = new Date(Date.now() - 60 * 1000).toISOString();
22
+
23
+ const browser = await chromium.launch({ headless: true });
24
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
25
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
26
+ await ctx.addInitScript(() => {
27
+ try {
28
+ localStorage.setItem('anet-theme', 'cyber');
29
+ localStorage.setItem('anet-topo-layout', 'grid');
30
+ sessionStorage.setItem('anet_v3_auth', '1');
31
+ } catch {}
32
+ });
33
+ await ctx.route('**/api/hub/status*', async (route) => {
34
+ const r = await route.fetch();
35
+ const b = await r.json();
36
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
37
+ const mk = (alias, status = 'idle') => ({
38
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
39
+ network_id: nid, project_dir: null,
40
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
41
+ });
42
+ // alpha-group has WORKING members → ants run at rest. Hovering a
43
+ // member alias should keep ants running (R561 refined gate).
44
+ await route.fulfill({ response: r, json: { ...b, sessions: [
45
+ mk('alpha·1', 'working'), mk('alpha·2', 'working'), mk('alpha·3'),
46
+ mk('foo'), mk('bar'), mk('baz'),
47
+ ] } });
48
+ });
49
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
50
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
51
+ const page = await ctx.newPage();
52
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
53
+ await page.waitForSelector('[data-group-label]', { timeout: 15000 });
54
+ await page.waitForTimeout(500);
55
+
56
+ const probeGroups = async () => {
57
+ return page.evaluate(() => {
58
+ const els = Array.from(document.querySelectorAll('[data-group-label]'));
59
+ return els.map(el => {
60
+ // Find the matching outer <g> with data-group-box-live to read the
61
+ // ants-gate refinement. The box rect sits within the same parent
62
+ // group as the label — both nest under the per-band <g> in the
63
+ // groupBoxes.map() loop.
64
+ const parent = el.closest('g')?.parentElement || null;
65
+ const boxRect = parent?.querySelector('[data-group-box-live]') || null;
66
+ return {
67
+ key: el.getAttribute('data-group-label'),
68
+ orphan: el.getAttribute('data-group-label-orphan') === 'true',
69
+ opacityAttr: el.getAttribute('data-group-label-opacity'),
70
+ computedOpacity: getComputedStyle(el).opacity,
71
+ memberAliasHovered: el.getAttribute('data-group-label-member-alias-hovered') === 'true',
72
+ boxLive: boxRect?.getAttribute('data-group-box-live'),
73
+ };
74
+ });
75
+ });
76
+ };
77
+
78
+ const restGroups = await probeGroups();
79
+
80
+ // Hover a node from the alpha group.
81
+ await page.hover('g[data-node="alpha·1"]');
82
+ await page.waitForTimeout(400);
83
+ const hoverGroups = await probeGroups();
84
+
85
+ await browser.close();
86
+
87
+ const restAlpha = restGroups.find(g => g.key === 'alpha·');
88
+ const restOrphan = restGroups.find(g => g.orphan);
89
+ const hoverAlpha = hoverGroups.find(g => g.key === 'alpha·');
90
+ const hoverOrphan = hoverGroups.find(g => g.orphan);
91
+
92
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
93
+ const sourceFlag = /const isMemberAliasHovered = !!hoveredAlias && groupKeys\[hoveredAlias\] === box\.key;/.test(src);
94
+ const sourceOpacity = /opacity=\{isPinned \|\| isHovered \|\| isMemberAliasHovered \? 1 : box\.isOrphan \? 0\.4 : 0\.55\}/.test(src);
95
+ const sourceAttr = /data-group-label-member-alias-hovered=/.test(src);
96
+
97
+ const results = {
98
+ alpha_present: !!restAlpha,
99
+ orphan_present: !!restOrphan,
100
+ rest_alpha_opacity_0_55: restAlpha?.computedOpacity === '0.55',
101
+ rest_alpha_attr_not_hovered: restAlpha?.memberAliasHovered === false,
102
+ rest_orphan_opacity_0_4: restOrphan?.computedOpacity === '0.4',
103
+ hover_alpha_opacity_1: hoverAlpha?.computedOpacity === '1',
104
+ hover_alpha_attr_hovered: hoverAlpha?.memberAliasHovered === true,
105
+ hover_orphan_opacity_unchanged: hoverOrphan?.computedOpacity === '0.4',
106
+ hover_orphan_attr_not_hovered: hoverOrphan?.memberAliasHovered === false,
107
+ // R561 ants-gate refinement: alpha group has working members.
108
+ // Rest: ants run ('true'). Pre-R561 hovering a member alias
109
+ // halted ants ('false'); R561 keeps them running on member-alias
110
+ // hover ('true'). Direct label hover would still halt — not
111
+ // exercised here.
112
+ rest_alpha_ants_running: restAlpha?.boxLive === 'true',
113
+ hover_alpha_ants_keep_running: hoverAlpha?.boxLive === 'true',
114
+ source_flag: sourceFlag,
115
+ source_opacity: sourceOpacity,
116
+ source_attr: sourceAttr,
117
+ };
118
+ const ok = Object.values(results).every(Boolean);
119
+ console.log(`${ok ? '✅' : '❌'} R561 group-label member-alias-hover opacity lift (4th anchor in inspection-overrides-encoding):`,
120
+ JSON.stringify(results, null, 2),
121
+ '\n rest alpha:', JSON.stringify(restAlpha),
122
+ '\n rest orphan:', JSON.stringify(restOrphan),
123
+ '\n hover alpha:', JSON.stringify(hoverAlpha),
124
+ '\n hover orphan:', JSON.stringify(hoverOrphan));
125
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,139 @@
1
+ /* Round 562 verification: legend-row swatch lifts r + drop-shadow
2
+ * when operator hovers a node alias whose status matches the row's
3
+ * tier. 5th anchor in inspection-overrides-encoding family.
4
+ *
5
+ * Mock: alpha·1 (working) + alpha·2 (idle) + alpha·3 (offline).
6
+ * Hover alpha·1 → 'working' legend swatch should lift; idle +
7
+ * offline swatches stay at rest.
8
+ *
9
+ * Test phases:
10
+ * 1. rest: all 3 swatches r=6, filter=none, attr='false'
11
+ * 2. hover alpha·1 (working) → working swatch r=7, filter contains
12
+ * drop-shadow with green hex; idle + offline unchanged
13
+ * 3. hover alpha·2 (idle) → idle swatch lifts, others rest
14
+ * 4. hover alpha·3 (offline) → offline swatch lifts, others rest
15
+ * 5. source-side regex confirms wiring
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 fresh = new Date(Date.now() - 60 * 1000).toISOString();
22
+
23
+ const browser = await chromium.launch({ headless: true });
24
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
25
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
26
+ await ctx.addInitScript(() => {
27
+ try {
28
+ localStorage.setItem('anet-theme', 'cyber');
29
+ localStorage.setItem('anet-topo-layout', 'ring');
30
+ sessionStorage.setItem('anet_v3_auth', '1');
31
+ } catch {}
32
+ });
33
+ await ctx.route('**/api/hub/status*', async (route) => {
34
+ const r = await route.fetch();
35
+ const b = await r.json();
36
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
37
+ const mk = (alias, status) => ({
38
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
39
+ network_id: nid, project_dir: null,
40
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
41
+ });
42
+ await route.fulfill({ response: r, json: { ...b, sessions: [
43
+ mk('alpha·1', 'working'),
44
+ mk('alpha·2', 'idle'),
45
+ mk('alpha·3', 'offline'),
46
+ ] } });
47
+ });
48
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
49
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
50
+ const page = await ctx.newPage();
51
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
52
+ await page.waitForSelector('[data-legend-swatch="working"]', { timeout: 15000 });
53
+ await page.waitForTimeout(500);
54
+
55
+ const probeSwatch = (key) => page.evaluate((k) => {
56
+ const el = document.querySelector(`[data-legend-swatch="${k}"]`);
57
+ if (!el) return null;
58
+ const cs = getComputedStyle(el);
59
+ return {
60
+ r: cs.r,
61
+ filter: cs.filter,
62
+ state: el.getAttribute('data-legend-swatch-state'),
63
+ matching: el.getAttribute('data-legend-swatch-member-alias-matching') === 'true',
64
+ glow: el.getAttribute('data-legend-swatch-glow') === 'true',
65
+ };
66
+ }, key);
67
+
68
+ const restWorking = await probeSwatch('working');
69
+ const restIdle = await probeSwatch('idle');
70
+ const restOffline = await probeSwatch('offline');
71
+
72
+ // Hover working node
73
+ await page.hover('g[data-node="alpha·1"]');
74
+ await page.waitForTimeout(400);
75
+ const hoverWorkingWorking = await probeSwatch('working');
76
+ const hoverWorkingIdle = await probeSwatch('idle');
77
+ const hoverWorkingOffline = await probeSwatch('offline');
78
+
79
+ // Move away to reset
80
+ await page.mouse.move(0, 0);
81
+ await page.waitForTimeout(300);
82
+
83
+ // Hover idle node
84
+ await page.hover('g[data-node="alpha·2"]');
85
+ await page.waitForTimeout(400);
86
+ const hoverIdleIdle = await probeSwatch('idle');
87
+
88
+ // Move away and hover offline node
89
+ await page.mouse.move(0, 0);
90
+ await page.waitForTimeout(300);
91
+ await page.hover('g[data-node="alpha·3"]');
92
+ await page.waitForTimeout(400);
93
+ const hoverOfflineOffline = await probeSwatch('offline');
94
+
95
+ await browser.close();
96
+
97
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
98
+ const sourceFlag = /const isMemberAliasMatching = hoveredAliasRowKey === row\.key;/.test(src);
99
+ const sourceLifted = /const isSwatchLifted = isLifted \|\| isMemberAliasMatching;/.test(src);
100
+ const sourceR = /r: isSwatchLifted \? '7px' : '6px'/.test(src);
101
+ const sourceFilter = /filter: isSwatchLifted/.test(src);
102
+ const sourceAttr = /data-legend-swatch-member-alias-matching=/.test(src);
103
+
104
+ const results = {
105
+ // Rest state — all swatches r=6, no glow
106
+ rest_working_r_6: restWorking?.r === '6px',
107
+ rest_working_filter_none: restWorking?.filter === 'none',
108
+ rest_working_matching_false: restWorking?.matching === false,
109
+ rest_idle_r_6: restIdle?.r === '6px',
110
+ rest_offline_r_6: restOffline?.r === '6px',
111
+ // Hover working node → working swatch lifts; idle + offline stay
112
+ hover_working_w_r_7: hoverWorkingWorking?.r === '7px',
113
+ hover_working_w_matching: hoverWorkingWorking?.matching === true,
114
+ hover_working_w_glow: /drop-shadow\(/.test(hoverWorkingWorking?.filter || ''),
115
+ hover_working_i_r_6: hoverWorkingIdle?.r === '6px',
116
+ hover_working_o_r_6: hoverWorkingOffline?.r === '6px',
117
+ // Hover idle node → idle swatch lifts
118
+ hover_idle_i_r_7: hoverIdleIdle?.r === '7px',
119
+ hover_idle_i_matching: hoverIdleIdle?.matching === true,
120
+ // Hover offline node → offline swatch lifts
121
+ hover_offline_o_r_7: hoverOfflineOffline?.r === '7px',
122
+ hover_offline_o_matching: hoverOfflineOffline?.matching === true,
123
+ // Source
124
+ source_flag: sourceFlag,
125
+ source_lifted: sourceLifted,
126
+ source_r: sourceR,
127
+ source_filter: sourceFilter,
128
+ source_attr: sourceAttr,
129
+ };
130
+ const ok = Object.values(results).every(Boolean);
131
+ console.log(`${ok ? '✅' : '❌'} R562 legend-swatch inspection-overrides-encoding (5th anchor):`,
132
+ JSON.stringify(results, null, 2),
133
+ '\n rest working:', JSON.stringify(restWorking),
134
+ '\n rest idle:', JSON.stringify(restIdle),
135
+ '\n rest offline:', JSON.stringify(restOffline),
136
+ '\n hover alpha·1 (working) → working:', JSON.stringify(hoverWorkingWorking),
137
+ '\n hover alpha·2 (idle) → idle:', JSON.stringify(hoverIdleIdle),
138
+ '\n hover alpha·3 (offline) → offline:', JSON.stringify(hoverOfflineOffline));
139
+ process.exit(ok ? 0 : 1);