@sleep2agi/agent-network-dashboard 0.5.1-preview.15 → 0.5.1-preview.17

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 (152) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/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/agent-network-dashboard_09kk21a._.js +1 -1
  132. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  137. package/.next/server/middleware-build-manifest.js +3 -3
  138. package/.next/server/pages/404.html +2 -2
  139. package/.next/server/pages/500.html +1 -1
  140. package/.next/static/chunks/{130iyp.vosnu3.js → 07d5swyhr-chy.js} +4 -4
  141. package/.next/static/chunks/{13i-p3vjlvsvq.js → 0ld8uqoyycqx9.js} +1 -1
  142. package/.next/static/chunks/{0mvhcqc3mpr4o.js → 0yt1-sd29n.lm.js} +1 -1
  143. package/.next/static/chunks/{0kt7qs66ra2.2.css → 0~oj~gm3ck7o8.css} +1 -1
  144. package/.next/trace +2 -2
  145. package/.next/trace-build +1 -1
  146. package/app/components/TopoGraph.tsx +71 -10
  147. package/package.json +1 -1
  148. package/scripts/topo-filter-pill-hover-opacity-test.mjs +110 -0
  149. package/scripts/topo-filter-pill-x-hover-scale-test.mjs +99 -0
  150. /package/.next/static/{CoEq5Ugcm3YcJCYZANWlX → bQRst1hNhHBetxfJd8icb}/_buildManifest.js +0 -0
  151. /package/.next/static/{CoEq5Ugcm3YcJCYZANWlX → bQRst1hNhHBetxfJd8icb}/_clientMiddlewareManifest.js +0 -0
  152. /package/.next/static/{CoEq5Ugcm3YcJCYZANWlX → bQRst1hNhHBetxfJd8icb}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":327,"timestamp":134396732139,"id":4,"parentId":1,"tags":{},"startTime":1778942368978,"traceId":"7dc15f402b78b3c2"},{"name":"load-custom-routes","duration":602,"timestamp":134396732622,"id":5,"parentId":1,"tags":{},"startTime":1778942368979,"traceId":"7dc15f402b78b3c2"},{"name":"create-dist-dir","duration":774,"timestamp":134396733280,"id":6,"parentId":1,"tags":{},"startTime":1778942368980,"traceId":"7dc15f402b78b3c2"},{"name":"clean","duration":35235,"timestamp":134396734748,"id":7,"parentId":1,"tags":{},"startTime":1778942368981,"traceId":"7dc15f402b78b3c2"},{"name":"discover-routes","duration":16485,"timestamp":134396854535,"id":8,"parentId":1,"tags":{},"startTime":1778942369101,"traceId":"7dc15f402b78b3c2"},{"name":"create-root-mapping","duration":182,"timestamp":134396871104,"id":9,"parentId":1,"tags":{},"startTime":1778942369117,"traceId":"7dc15f402b78b3c2"},{"name":"generate-route-types","duration":36706,"timestamp":134396873850,"id":10,"parentId":1,"tags":{},"startTime":1778942369120,"traceId":"7dc15f402b78b3c2"},{"name":"public-dir-conflict-check","duration":100,"timestamp":134396910636,"id":11,"parentId":1,"tags":{},"startTime":1778942369157,"traceId":"7dc15f402b78b3c2"},{"name":"generate-routes-manifest","duration":4846,"timestamp":134396910848,"id":12,"parentId":1,"tags":{},"startTime":1778942369157,"traceId":"7dc15f402b78b3c2"},{"name":"run-turbopack","duration":6203170,"timestamp":134396920770,"id":14,"parentId":1,"tags":{},"startTime":1778942369167,"traceId":"7dc15f402b78b3c2"},{"name":"turbopack-build-events","duration":92,"timestamp":134397220211,"id":15,"parentId":1,"tags":{},"startTime":1778942369466,"traceId":"7dc15f402b78b3c2"},{"name":"run-typescript","duration":9827858,"timestamp":134403143507,"id":16,"parentId":1,"tags":{},"startTime":1778942375390,"traceId":"7dc15f402b78b3c2"},{"name":"generate-required-server-files","duration":2700,"timestamp":134412972660,"id":18,"parentId":1,"tags":{},"startTime":1778942385219,"traceId":"7dc15f402b78b3c2"},{"name":"check-static-error-page","duration":12636,"timestamp":134413137124,"id":20,"parentId":19,"tags":{},"startTime":1778942385383,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":484171,"timestamp":134413153149,"id":65,"parentId":22,"tags":{},"startTime":1778942385399,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":497965,"timestamp":134413139522,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778942385386,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":554555,"timestamp":134413153633,"id":69,"parentId":28,"tags":{},"startTime":1778942385400,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":566011,"timestamp":134413142310,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778942385389,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":557929,"timestamp":134413153936,"id":70,"parentId":29,"tags":{},"startTime":1778942385400,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":569546,"timestamp":134413142398,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778942385389,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":562927,"timestamp":134413154423,"id":73,"parentId":33,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":574213,"timestamp":134413143205,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778942385389,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":567771,"timestamp":134413154210,"id":72,"parentId":32,"tags":{},"startTime":1778942385400,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":579020,"timestamp":134413143045,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778942385389,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":583752,"timestamp":134413154541,"id":75,"parentId":35,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":594878,"timestamp":134413143493,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778942385390,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":589239,"timestamp":134413154132,"id":71,"parentId":30,"tags":{},"startTime":1778942385400,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":600873,"timestamp":134413142568,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778942385389,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":604205,"timestamp":134413154568,"id":76,"parentId":36,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":614854,"timestamp":134413143980,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778942385390,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":608672,"timestamp":134413152766,"id":64,"parentId":21,"tags":{},"startTime":1778942385399,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":623182,"timestamp":134413138329,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778942385385,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":611600,"timestamp":134413154618,"id":78,"parentId":38,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":621912,"timestamp":134413144376,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778942385391,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":611940,"timestamp":134413154513,"id":74,"parentId":34,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":623126,"timestamp":134413143356,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778942385390,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":613212,"timestamp":134413153513,"id":68,"parentId":27,"tags":{},"startTime":1778942385400,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":624545,"timestamp":134413142212,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778942385388,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":612443,"timestamp":134413154602,"id":77,"parentId":37,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":622880,"timestamp":134413144212,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778942385390,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":613323,"timestamp":134413154650,"id":80,"parentId":40,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":623456,"timestamp":134413144574,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778942385391,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":618228,"timestamp":134413154711,"id":84,"parentId":46,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":627470,"timestamp":134413145511,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778942385392,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":618432,"timestamp":134413154693,"id":83,"parentId":45,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":627721,"timestamp":134413145437,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778942385392,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":622141,"timestamp":134413154723,"id":85,"parentId":47,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":629892,"timestamp":134413147029,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778942385393,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":624475,"timestamp":134413153399,"id":67,"parentId":26,"tags":{},"startTime":1778942385400,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":635799,"timestamp":134413142120,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778942385388,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":623871,"timestamp":134413154739,"id":86,"parentId":48,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":631497,"timestamp":134413147152,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778942385393,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":626427,"timestamp":134413154754,"id":87,"parentId":49,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":633962,"timestamp":134413147256,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":629616,"timestamp":134413154765,"id":88,"parentId":50,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":637103,"timestamp":134413147319,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":631941,"timestamp":134413154662,"id":81,"parentId":42,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":641727,"timestamp":134413144931,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778942385391,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":628238,"timestamp":134413158778,"id":90,"parentId":24,"tags":{},"startTime":1778942385405,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":647129,"timestamp":134413139927,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778942385386,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":633946,"timestamp":134413153281,"id":66,"parentId":25,"tags":{},"startTime":1778942385400,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":645317,"timestamp":134413141959,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778942385388,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":635249,"timestamp":134413160827,"id":92,"parentId":41,"tags":{},"startTime":1778942385407,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":651472,"timestamp":134413144666,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778942385391,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":633949,"timestamp":134413162364,"id":93,"parentId":43,"tags":{},"startTime":1778942385409,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":651257,"timestamp":134413145090,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778942385391,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":641676,"timestamp":134413154781,"id":89,"parentId":51,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":649110,"timestamp":134413147375,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":676666,"timestamp":134413154677,"id":82,"parentId":44,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":686085,"timestamp":134413145336,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778942385392,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":674892,"timestamp":134413159955,"id":91,"parentId":31,"tags":{},"startTime":1778942385406,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":692196,"timestamp":134413142724,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778942385389,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":703429,"timestamp":134413164736,"id":94,"parentId":23,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":728512,"timestamp":134413139744,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778942385386,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":718072,"timestamp":134413154635,"id":79,"parentId":39,"tags":{},"startTime":1778942385401,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":728350,"timestamp":134413144474,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778942385391,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":711120,"timestamp":134413164847,"id":100,"parentId":58,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":727281,"timestamp":134413148762,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778942385395,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":718715,"timestamp":134413164787,"id":96,"parentId":53,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":735872,"timestamp":134413147774,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":719351,"timestamp":134413165038,"id":102,"parentId":61,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":735061,"timestamp":134413149376,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778942385396,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":719678,"timestamp":134413164984,"id":101,"parentId":59,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":735778,"timestamp":134413148920,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778942385395,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":725293,"timestamp":134413164799,"id":97,"parentId":54,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":742253,"timestamp":134413147879,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":727853,"timestamp":134413165068,"id":104,"parentId":63,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":743372,"timestamp":134413149587,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778942385396,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":717092,"timestamp":134413176292,"id":105,"parentId":60,"tags":{},"startTime":1778942385423,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":744368,"timestamp":134413149060,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778942385395,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":734024,"timestamp":134413164769,"id":95,"parentId":52,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":751171,"timestamp":134413147669,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":734374,"timestamp":134413165056,"id":103,"parentId":62,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":749995,"timestamp":134413149484,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778942385396,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":707928,"timestamp":134413191635,"id":106,"parentId":57,"tags":{},"startTime":1778942385438,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":751230,"timestamp":134413148357,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778942385395,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":744867,"timestamp":134413164831,"id":99,"parentId":56,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":761564,"timestamp":134413148183,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"is-page-static","duration":748266,"timestamp":134413164815,"id":98,"parentId":55,"tags":{},"startTime":1778942385411,"traceId":"7dc15f402b78b3c2"},{"name":"check-page","duration":765087,"timestamp":134413148033,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778942385394,"traceId":"7dc15f402b78b3c2"},{"name":"static-check","duration":776838,"timestamp":134413136320,"id":19,"parentId":1,"tags":{},"startTime":1778942385383,"traceId":"7dc15f402b78b3c2"}]
2
- [{"name":"write-routes-manifest","duration":510,"timestamp":134413922932,"id":108,"parentId":1,"tags":{},"startTime":1778942386169,"traceId":"7dc15f402b78b3c2"},{"name":"load-dotenv","duration":80,"timestamp":134413937217,"id":111,"parentId":110,"tags":{},"startTime":1778942386183,"traceId":"7dc15f402b78b3c2"},{"name":"run-export-path-map","duration":897,"timestamp":134413940546,"id":112,"parentId":110,"tags":{},"startTime":1778942386187,"traceId":"7dc15f402b78b3c2"},{"name":"next-export","duration":668737,"timestamp":134413935317,"id":110,"parentId":1,"tags":{},"startTime":1778942386182,"traceId":"7dc15f402b78b3c2"},{"name":"move-exported-app-not-found-","duration":512,"timestamp":134414607281,"id":113,"parentId":109,"tags":{},"startTime":1778942386854,"traceId":"7dc15f402b78b3c2"},{"name":"move-exported-app-global-error-","duration":487,"timestamp":134414607880,"id":114,"parentId":109,"tags":{},"startTime":1778942386854,"traceId":"7dc15f402b78b3c2"},{"name":"static-generation","duration":682535,"timestamp":134413927831,"id":109,"parentId":1,"tags":{},"startTime":1778942386174,"traceId":"7dc15f402b78b3c2"},{"name":"write-routes-manifest","duration":486,"timestamp":134414610618,"id":115,"parentId":1,"tags":{},"startTime":1778942386857,"traceId":"7dc15f402b78b3c2"},{"name":"print-tree-view","duration":3862,"timestamp":134414625644,"id":116,"parentId":1,"tags":{},"startTime":1778942386872,"traceId":"7dc15f402b78b3c2"},{"name":"write-route-bundle-stats","duration":13017,"timestamp":134414629542,"id":117,"parentId":1,"tags":{},"startTime":1778942386876,"traceId":"7dc15f402b78b3c2"},{"name":"telemetry-flush","duration":30596,"timestamp":134414642590,"id":118,"parentId":1,"tags":{},"startTime":1778942386889,"traceId":"7dc15f402b78b3c2"},{"name":"next-build","duration":17993271,"timestamp":134396679967,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778942368926,"traceId":"7dc15f402b78b3c2"}]
1
+ [{"name":"generate-buildid","duration":373,"timestamp":135026548368,"id":4,"parentId":1,"tags":{},"startTime":1778942998795,"traceId":"c1d59d2b94fd225a"},{"name":"load-custom-routes","duration":753,"timestamp":135026548947,"id":5,"parentId":1,"tags":{},"startTime":1778942998795,"traceId":"c1d59d2b94fd225a"},{"name":"create-dist-dir","duration":946,"timestamp":135026549792,"id":6,"parentId":1,"tags":{},"startTime":1778942998796,"traceId":"c1d59d2b94fd225a"},{"name":"clean","duration":32834,"timestamp":135026551643,"id":7,"parentId":1,"tags":{},"startTime":1778942998798,"traceId":"c1d59d2b94fd225a"},{"name":"discover-routes","duration":24656,"timestamp":135026673960,"id":8,"parentId":1,"tags":{},"startTime":1778942998920,"traceId":"c1d59d2b94fd225a"},{"name":"create-root-mapping","duration":140,"timestamp":135026698697,"id":9,"parentId":1,"tags":{},"startTime":1778942998945,"traceId":"c1d59d2b94fd225a"},{"name":"generate-route-types","duration":21962,"timestamp":135026701504,"id":10,"parentId":1,"tags":{},"startTime":1778942998948,"traceId":"c1d59d2b94fd225a"},{"name":"public-dir-conflict-check","duration":120,"timestamp":135026723580,"id":11,"parentId":1,"tags":{},"startTime":1778942998970,"traceId":"c1d59d2b94fd225a"},{"name":"generate-routes-manifest","duration":5476,"timestamp":135026723860,"id":12,"parentId":1,"tags":{},"startTime":1778942998970,"traceId":"c1d59d2b94fd225a"},{"name":"run-turbopack","duration":6491619,"timestamp":135026734919,"id":14,"parentId":1,"tags":{},"startTime":1778942998981,"traceId":"c1d59d2b94fd225a"},{"name":"turbopack-build-events","duration":108,"timestamp":135027029440,"id":15,"parentId":1,"tags":{},"startTime":1778942999276,"traceId":"c1d59d2b94fd225a"},{"name":"run-typescript","duration":9645520,"timestamp":135033237840,"id":16,"parentId":1,"tags":{},"startTime":1778943005484,"traceId":"c1d59d2b94fd225a"},{"name":"generate-required-server-files","duration":2229,"timestamp":135042884713,"id":18,"parentId":1,"tags":{},"startTime":1778943015131,"traceId":"c1d59d2b94fd225a"},{"name":"check-static-error-page","duration":14648,"timestamp":135043040231,"id":20,"parentId":19,"tags":{},"startTime":1778943015287,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":553649,"timestamp":135043057986,"id":65,"parentId":22,"tags":{},"startTime":1778943015304,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":569274,"timestamp":135043042575,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778943015289,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":586907,"timestamp":135043059648,"id":68,"parentId":27,"tags":{},"startTime":1778943015306,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":601296,"timestamp":135043045357,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":588645,"timestamp":135043058273,"id":67,"parentId":26,"tags":{},"startTime":1778943015305,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":601703,"timestamp":135043045260,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":607711,"timestamp":135043058166,"id":66,"parentId":25,"tags":{},"startTime":1778943015304,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":620854,"timestamp":135043045087,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778943015291,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":611093,"timestamp":135043059822,"id":69,"parentId":28,"tags":{},"startTime":1778943015306,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":625559,"timestamp":135043045439,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":610875,"timestamp":135043060824,"id":74,"parentId":34,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":625623,"timestamp":135043046137,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":614239,"timestamp":135043060551,"id":72,"parentId":32,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":628943,"timestamp":135043045903,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":622069,"timestamp":135043060902,"id":77,"parentId":37,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":636097,"timestamp":135043046942,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778943015293,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":625420,"timestamp":135043060856,"id":75,"parentId":35,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":640064,"timestamp":135043046264,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778943015293,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":627457,"timestamp":135043060736,"id":73,"parentId":33,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":642212,"timestamp":135043046028,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":627465,"timestamp":135043060918,"id":78,"parentId":38,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":641287,"timestamp":135043047127,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778943015293,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":636397,"timestamp":135043060940,"id":80,"parentId":40,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":650031,"timestamp":135043047355,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778943015294,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":637397,"timestamp":135043060300,"id":70,"parentId":29,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":652218,"timestamp":135043045517,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":639272,"timestamp":135043060952,"id":81,"parentId":42,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":652573,"timestamp":135043047715,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778943015294,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":641966,"timestamp":135043060976,"id":83,"parentId":45,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":654734,"timestamp":135043048260,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778943015295,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":649453,"timestamp":135043060877,"id":76,"parentId":36,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":663714,"timestamp":135043046660,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778943015293,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":655248,"timestamp":135043060964,"id":82,"parentId":44,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":668265,"timestamp":135043048144,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778943015294,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":661153,"timestamp":135043061045,"id":87,"parentId":49,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":673603,"timestamp":135043048644,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778943015295,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":661396,"timestamp":135043060984,"id":84,"parentId":46,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":674056,"timestamp":135043048348,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778943015295,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":664872,"timestamp":135043060931,"id":79,"parentId":39,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":678638,"timestamp":135043047240,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778943015294,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":665098,"timestamp":135043061030,"id":86,"parentId":48,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":677638,"timestamp":135043048531,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778943015295,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":666314,"timestamp":135043061070,"id":89,"parentId":51,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":677053,"timestamp":135043050385,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778943015297,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":671194,"timestamp":135043061055,"id":88,"parentId":50,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":682066,"timestamp":135043050225,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778943015297,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":646089,"timestamp":135043086372,"id":92,"parentId":41,"tags":{},"startTime":1778943015333,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":685041,"timestamp":135043047451,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778943015294,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":649055,"timestamp":135043085271,"id":91,"parentId":31,"tags":{},"startTime":1778943015332,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":688668,"timestamp":135043045699,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":640447,"timestamp":135043095939,"id":93,"parentId":43,"tags":{},"startTime":1778943015342,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":688570,"timestamp":135043047857,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778943015294,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":658758,"timestamp":135043080092,"id":90,"parentId":24,"tags":{},"startTime":1778943015326,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":695828,"timestamp":135043043059,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778943015289,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":683793,"timestamp":135043060996,"id":85,"parentId":47,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":696398,"timestamp":135043048444,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778943015295,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":732512,"timestamp":135043060479,"id":71,"parentId":30,"tags":{},"startTime":1778943015307,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":747496,"timestamp":135043045612,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778943015292,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":686616,"timestamp":135043107105,"id":94,"parentId":23,"tags":{},"startTime":1778943015353,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":750956,"timestamp":135043042822,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778943015289,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":736912,"timestamp":135043057562,"id":64,"parentId":21,"tags":{},"startTime":1778943015304,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":753115,"timestamp":135043041416,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778943015288,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":691743,"timestamp":135043107140,"id":95,"parentId":52,"tags":{},"startTime":1778943015353,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":748042,"timestamp":135043050894,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778943015297,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":695913,"timestamp":135043107341,"id":101,"parentId":59,"tags":{},"startTime":1778943015354,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":750376,"timestamp":135043052948,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778943015299,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":696258,"timestamp":135043107223,"id":100,"parentId":58,"tags":{},"startTime":1778943015353,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":750833,"timestamp":135043052689,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778943015299,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":696713,"timestamp":135043107160,"id":96,"parentId":53,"tags":{},"startTime":1778943015353,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":752823,"timestamp":135043051110,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778943015297,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":701469,"timestamp":135043107357,"id":102,"parentId":61,"tags":{},"startTime":1778943015354,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":755258,"timestamp":135043053622,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778943015300,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":706865,"timestamp":135043107386,"id":104,"parentId":63,"tags":{},"startTime":1778943015354,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":759748,"timestamp":135043054552,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778943015301,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":659284,"timestamp":135043156644,"id":106,"parentId":60,"tags":{},"startTime":1778943015403,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":762805,"timestamp":135043053165,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778943015299,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":687999,"timestamp":135043128551,"id":105,"parentId":57,"tags":{},"startTime":1778943015375,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":764509,"timestamp":135043052075,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778943015298,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":710113,"timestamp":135043107183,"id":98,"parentId":55,"tags":{},"startTime":1778943015353,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":765857,"timestamp":135043051491,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778943015298,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":713512,"timestamp":135043107173,"id":97,"parentId":54,"tags":{},"startTime":1778943015353,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":769441,"timestamp":135043051288,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778943015298,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":729722,"timestamp":135043107372,"id":103,"parentId":62,"tags":{},"startTime":1778943015354,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":782810,"timestamp":135043054347,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778943015301,"traceId":"c1d59d2b94fd225a"},{"name":"is-page-static","duration":751076,"timestamp":135043107207,"id":99,"parentId":56,"tags":{},"startTime":1778943015353,"traceId":"c1d59d2b94fd225a"},{"name":"check-page","duration":806574,"timestamp":135043051767,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778943015298,"traceId":"c1d59d2b94fd225a"},{"name":"static-check","duration":818979,"timestamp":135043039404,"id":19,"parentId":1,"tags":{},"startTime":1778943015286,"traceId":"c1d59d2b94fd225a"}]
2
+ [{"name":"write-routes-manifest","duration":1471,"timestamp":135043870211,"id":108,"parentId":1,"tags":{},"startTime":1778943016116,"traceId":"c1d59d2b94fd225a"},{"name":"load-dotenv","duration":58,"timestamp":135043886908,"id":111,"parentId":110,"tags":{},"startTime":1778943016133,"traceId":"c1d59d2b94fd225a"},{"name":"run-export-path-map","duration":888,"timestamp":135043890636,"id":112,"parentId":110,"tags":{},"startTime":1778943016137,"traceId":"c1d59d2b94fd225a"},{"name":"next-export","duration":608713,"timestamp":135043884609,"id":110,"parentId":1,"tags":{},"startTime":1778943016131,"traceId":"c1d59d2b94fd225a"},{"name":"move-exported-app-not-found-","duration":635,"timestamp":135044497058,"id":113,"parentId":109,"tags":{},"startTime":1778943016743,"traceId":"c1d59d2b94fd225a"},{"name":"move-exported-app-global-error-","duration":455,"timestamp":135044497819,"id":114,"parentId":109,"tags":{},"startTime":1778943016744,"traceId":"c1d59d2b94fd225a"},{"name":"static-generation","duration":624089,"timestamp":135043876336,"id":109,"parentId":1,"tags":{},"startTime":1778943016123,"traceId":"c1d59d2b94fd225a"},{"name":"write-routes-manifest","duration":625,"timestamp":135044500762,"id":115,"parentId":1,"tags":{},"startTime":1778943016747,"traceId":"c1d59d2b94fd225a"},{"name":"print-tree-view","duration":4024,"timestamp":135044516629,"id":116,"parentId":1,"tags":{},"startTime":1778943016763,"traceId":"c1d59d2b94fd225a"},{"name":"write-route-bundle-stats","duration":13920,"timestamp":135044520697,"id":117,"parentId":1,"tags":{},"startTime":1778943016767,"traceId":"c1d59d2b94fd225a"},{"name":"telemetry-flush","duration":21518,"timestamp":135044534643,"id":118,"parentId":1,"tags":{},"startTime":1778943016781,"traceId":"c1d59d2b94fd225a"},{"name":"next-build","duration":18063258,"timestamp":135026492953,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778942998739,"traceId":"c1d59d2b94fd225a"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6203170,"timestamp":134396920770,"id":14,"parentId":1,"tags":{},"startTime":1778942369167,"traceId":"7dc15f402b78b3c2"},{"name":"turbopack-build-events","duration":92,"timestamp":134397220211,"id":15,"parentId":1,"tags":{},"startTime":1778942369466,"traceId":"7dc15f402b78b3c2"},{"name":"run-typescript","duration":9827858,"timestamp":134403143507,"id":16,"parentId":1,"tags":{},"startTime":1778942375390,"traceId":"7dc15f402b78b3c2"},{"name":"static-check","duration":776838,"timestamp":134413136320,"id":19,"parentId":1,"tags":{},"startTime":1778942385383,"traceId":"7dc15f402b78b3c2"},{"name":"static-generation","duration":682535,"timestamp":134413927831,"id":109,"parentId":1,"tags":{},"startTime":1778942386174,"traceId":"7dc15f402b78b3c2"},{"name":"telemetry-flush","duration":30596,"timestamp":134414642590,"id":118,"parentId":1,"tags":{},"startTime":1778942386889,"traceId":"7dc15f402b78b3c2"},{"name":"next-build","duration":17993271,"timestamp":134396679967,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778942368926,"traceId":"7dc15f402b78b3c2"}]
1
+ [{"name":"run-turbopack","duration":6491619,"timestamp":135026734919,"id":14,"parentId":1,"tags":{},"startTime":1778942998981,"traceId":"c1d59d2b94fd225a"},{"name":"turbopack-build-events","duration":108,"timestamp":135027029440,"id":15,"parentId":1,"tags":{},"startTime":1778942999276,"traceId":"c1d59d2b94fd225a"},{"name":"run-typescript","duration":9645520,"timestamp":135033237840,"id":16,"parentId":1,"tags":{},"startTime":1778943005484,"traceId":"c1d59d2b94fd225a"},{"name":"static-check","duration":818979,"timestamp":135043039404,"id":19,"parentId":1,"tags":{},"startTime":1778943015286,"traceId":"c1d59d2b94fd225a"},{"name":"static-generation","duration":624089,"timestamp":135043876336,"id":109,"parentId":1,"tags":{},"startTime":1778943016123,"traceId":"c1d59d2b94fd225a"},{"name":"telemetry-flush","duration":21518,"timestamp":135044534643,"id":118,"parentId":1,"tags":{},"startTime":1778943016781,"traceId":"c1d59d2b94fd225a"},{"name":"next-build","duration":18063258,"timestamp":135026492953,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778942998739,"traceId":"c1d59d2b94fd225a"}]
@@ -2311,7 +2311,10 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2311
2311
  data-active-filter="status"
2312
2312
  data-filter-match-count={matchCount}
2313
2313
  data-filter-match-aliases={matchAliases.join(',')}
2314
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2314
+ // R355: `group` lets the inner opacity-70 spans (prefix
2315
+ // `filter:` + count `· N`) brighten to 100 % on pill hover.
2316
+ // Sibling treatment on group + vendor pills below.
2317
+ className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2315
2318
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear filter'}
2316
2319
  onClick={() => setPinnedStatus(null)}
2317
2320
  style={{
@@ -2325,12 +2328,26 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2325
2328
  cursor: 'pointer',
2326
2329
  }}
2327
2330
  >
2328
- <span><span className="hidden sm:inline opacity-70" data-filter-prefix>filter: </span>{pinnedStatus}<span className="opacity-70 tabular-nums" data-filter-pill-count> · {matchCount}</span></span>
2331
+ <span><span className="hidden sm:inline opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-filter-prefix>filter: </span>{pinnedStatus}<span className="opacity-70 tabular-nums transition-opacity duration-200 group-hover:opacity-100" data-filter-pill-count> · {matchCount}</span></span>
2329
2332
  <button
2330
2333
  type="button"
2331
2334
  aria-label={`Clear ${pinnedStatus} filter`}
2332
2335
  onClick={(e) => { e.stopPropagation(); setPinnedStatus(null); }}
2333
- className="ml-0.5 leading-none hover:opacity-70"
2336
+ /* Round 356 / Loop: filter pin pill × buttons gain
2337
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2338
+ not legacy transform). Sibling polish to R354 vendor
2339
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2340
+ Pre-R356 the × had only hover:opacity-70 — the target
2341
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2342
+ scale on hover so the click-target reads as "press me"
2343
+ alongside the dim. transform-gpu hint promotes the
2344
+ button to its own compositor layer for crisper edges
2345
+ during the scale tween. transition-transform duration-
2346
+ 200 matches the chrome icon hover-scale timing family.
2347
+ inline-block is default for <button> so no display
2348
+ tweak needed. replace_all covers all 4 filter pin
2349
+ pills (status / group / vendor / edge) at once. */
2350
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2334
2351
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2335
2352
  >×</button>
2336
2353
  </span>
@@ -2349,7 +2366,8 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2349
2366
  data-active-filter="group"
2350
2367
  data-filter-match-count={matchCount}
2351
2368
  data-filter-match-aliases={matchAliases.join(',')}
2352
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2369
+ // R355 sibling — `group` parent + group-hover on inner spans.
2370
+ className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2353
2371
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear filter'}
2354
2372
  onClick={() => setPinnedGroup(null)}
2355
2373
  style={{
@@ -2359,12 +2377,26 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2359
2377
  cursor: 'pointer',
2360
2378
  }}
2361
2379
  >
2362
- <span><span className="hidden sm:inline opacity-70" data-filter-prefix>filter: </span>{pinnedGroup}<span className="opacity-70 tabular-nums" data-filter-pill-count> · {matchCount}</span></span>
2380
+ <span><span className="hidden sm:inline opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-filter-prefix>filter: </span>{pinnedGroup}<span className="opacity-70 tabular-nums transition-opacity duration-200 group-hover:opacity-100" data-filter-pill-count> · {matchCount}</span></span>
2363
2381
  <button
2364
2382
  type="button"
2365
2383
  aria-label={`Clear group filter ${pinnedGroup}`}
2366
2384
  onClick={(e) => { e.stopPropagation(); setPinnedGroup(null); }}
2367
- className="ml-0.5 leading-none hover:opacity-70"
2385
+ /* Round 356 / Loop: filter pin pill × buttons gain
2386
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2387
+ not legacy transform). Sibling polish to R354 vendor
2388
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2389
+ Pre-R356 the × had only hover:opacity-70 — the target
2390
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2391
+ scale on hover so the click-target reads as "press me"
2392
+ alongside the dim. transform-gpu hint promotes the
2393
+ button to its own compositor layer for crisper edges
2394
+ during the scale tween. transition-transform duration-
2395
+ 200 matches the chrome icon hover-scale timing family.
2396
+ inline-block is default for <button> so no display
2397
+ tweak needed. replace_all covers all 4 filter pin
2398
+ pills (status / group / vendor / edge) at once. */
2399
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2368
2400
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2369
2401
  >×</button>
2370
2402
  </span>
@@ -2399,7 +2431,8 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2399
2431
  data-active-filter="vendor"
2400
2432
  data-filter-match-count={matchCount}
2401
2433
  data-filter-match-aliases={matchAliases.join(',')}
2402
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2434
+ // R355 sibling — `group` parent + group-hover on inner spans.
2435
+ className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2403
2436
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear vendor filter'}
2404
2437
  onClick={() => setPinnedVendor(null)}
2405
2438
  style={{
@@ -2409,12 +2442,26 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2409
2442
  cursor: 'pointer',
2410
2443
  }}
2411
2444
  >
2412
- <span><span className="hidden sm:inline opacity-70" data-filter-prefix>filter: </span>{pinnedVendor}<span className="opacity-70 tabular-nums" data-filter-pill-count> · {matchCount}</span></span>
2445
+ <span><span className="hidden sm:inline opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-filter-prefix>filter: </span>{pinnedVendor}<span className="opacity-70 tabular-nums transition-opacity duration-200 group-hover:opacity-100" data-filter-pill-count> · {matchCount}</span></span>
2413
2446
  <button
2414
2447
  type="button"
2415
2448
  aria-label={`Clear vendor filter ${pinnedVendor}`}
2416
2449
  onClick={(e) => { e.stopPropagation(); setPinnedVendor(null); }}
2417
- className="ml-0.5 leading-none hover:opacity-70"
2450
+ /* Round 356 / Loop: filter pin pill × buttons gain
2451
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2452
+ not legacy transform). Sibling polish to R354 vendor
2453
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2454
+ Pre-R356 the × had only hover:opacity-70 — the target
2455
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2456
+ scale on hover so the click-target reads as "press me"
2457
+ alongside the dim. transform-gpu hint promotes the
2458
+ button to its own compositor layer for crisper edges
2459
+ during the scale tween. transition-transform duration-
2460
+ 200 matches the chrome icon hover-scale timing family.
2461
+ inline-block is default for <button> so no display
2462
+ tweak needed. replace_all covers all 4 filter pin
2463
+ pills (status / group / vendor / edge) at once. */
2464
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2418
2465
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2419
2466
  >×</button>
2420
2467
  </span>
@@ -2491,7 +2538,21 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2491
2538
  type="button"
2492
2539
  aria-label={`Clear edge filter ${link.from} → ${link.to}`}
2493
2540
  onClick={(e) => { e.stopPropagation(); setPinnedEdgeKey(null); }}
2494
- className="ml-0.5 leading-none hover:opacity-70"
2541
+ /* Round 356 / Loop: filter pin pill × buttons gain
2542
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2543
+ not legacy transform). Sibling polish to R354 vendor
2544
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2545
+ Pre-R356 the × had only hover:opacity-70 — the target
2546
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2547
+ scale on hover so the click-target reads as "press me"
2548
+ alongside the dim. transform-gpu hint promotes the
2549
+ button to its own compositor layer for crisper edges
2550
+ during the scale tween. transition-transform duration-
2551
+ 200 matches the chrome icon hover-scale timing family.
2552
+ inline-block is default for <button> so no display
2553
+ tweak needed. replace_all covers all 4 filter pin
2554
+ pills (status / group / vendor / edge) at once. */
2555
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2495
2556
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2496
2557
  >×</button>
2497
2558
  </span>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.15",
3
+ "version": "0.5.1-preview.17",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,110 @@
1
+ /* Round 355 verification: filter pin pills (status / group / vendor)
2
+ * gain pure-CSS group-hover lift of their inner opacity-70 spans
3
+ * (prefix `filter:` + count `· N`) to 100 % on pill hover. Marks the
4
+ * whole pill as scan-it interactive without layout reflow (opacity
5
+ * is paint-only). The R335 prefix-opacity tier + R323 count-opacity
6
+ * tier are preserved at rest; both ease to 100 % on pill hover.
7
+ *
8
+ * Contract (cyber, status filter pinned to 'working'):
9
+ * - Rest: filter-prefix + filter-pill-count computed opacity 0.7.
10
+ * - Hover pill: both spans computed opacity 1.
11
+ * - Inline transition contains 'opacity'.
12
+ * - Pre-R355 invariants:
13
+ * * R335 prefix span keeps `hidden sm:inline opacity-70` baseline
14
+ * * R323 count span keeps `opacity-70 tabular-nums` baseline
15
+ * * Pill click-to-clear unchanged (still has onClick / cursor)
16
+ */
17
+ import { chromium } from 'playwright';
18
+ import { readFileSync } from 'node:fs';
19
+
20
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
21
+ const browser = await chromium.launch({ headless: true });
22
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
23
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
24
+ await ctx.addInitScript(() => {
25
+ try {
26
+ localStorage.setItem('anet-theme', 'cyber');
27
+ sessionStorage.setItem('anet_v3_auth', '1');
28
+ // Pre-pin status='working' so the filter pill mounts on first paint.
29
+ localStorage.setItem('anet-pinnedStatus', JSON.stringify('working'));
30
+ } catch {}
31
+ });
32
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
33
+ await ctx.route('**/api/hub/status*', async (route) => {
34
+ const r = await route.fetch();
35
+ const b = await r.json();
36
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
37
+ const mk = (alias) => ({
38
+ alias, status: 'working', 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: [ mk('a'), mk('b'), mk('c') ] } });
43
+ });
44
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
45
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
46
+
47
+ const page = await ctx.newPage();
48
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
49
+ // If pre-pin via localStorage didn't take, click the working chip to pin.
50
+ await page.waitForSelector('[data-working-chip]', { timeout: 15000 });
51
+ const pillVisible = await page.locator('[data-active-filter="status"]').count();
52
+ if (pillVisible === 0) {
53
+ await page.click('[data-working-chip]');
54
+ await page.waitForSelector('[data-active-filter="status"]', { timeout: 5000 });
55
+ }
56
+ await page.waitForTimeout(300);
57
+
58
+ const restProbe = await page.evaluate(() => {
59
+ const pill = document.querySelector('[data-active-filter="status"]');
60
+ const prefix = pill?.querySelector('[data-filter-prefix]');
61
+ const count = pill?.querySelector('[data-filter-pill-count]');
62
+ return {
63
+ prefixOpacity: prefix ? getComputedStyle(prefix).opacity : null,
64
+ countOpacity: count ? getComputedStyle(count).opacity : null,
65
+ prefixTrans: prefix ? getComputedStyle(prefix).transition : null,
66
+ countTrans: count ? getComputedStyle(count).transition : null,
67
+ prefixCls: prefix?.getAttribute('class') ?? null,
68
+ countCls: count?.getAttribute('class') ?? null,
69
+ pillCursor: pill ? getComputedStyle(pill).cursor : null,
70
+ };
71
+ });
72
+
73
+ // Hover the pill.
74
+ await page.hover('[data-active-filter="status"]');
75
+ await page.waitForTimeout(300);
76
+ const hoverProbe = await page.evaluate(() => {
77
+ const pill = document.querySelector('[data-active-filter="status"]');
78
+ const prefix = pill?.querySelector('[data-filter-prefix]');
79
+ const count = pill?.querySelector('[data-filter-pill-count]');
80
+ return {
81
+ prefixOpacity: prefix ? getComputedStyle(prefix).opacity : null,
82
+ countOpacity: count ? getComputedStyle(count).opacity : null,
83
+ };
84
+ });
85
+
86
+ await browser.close();
87
+
88
+ const approxEq = (a, b, tol = 0.02) => {
89
+ const x = parseFloat(a); const y = parseFloat(b);
90
+ return Number.isFinite(x) && Number.isFinite(y) && Math.abs(x - y) <= tol;
91
+ };
92
+ const hasTrans = (s, prop) =>
93
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
94
+
95
+ const results = {
96
+ rest_prefix_0_7: approxEq(restProbe.prefixOpacity, 0.7),
97
+ rest_count_0_7: approxEq(restProbe.countOpacity, 0.7),
98
+ prefix_trans_has_op: hasTrans(restProbe.prefixTrans, 'opacity'),
99
+ count_trans_has_op: hasTrans(restProbe.countTrans, 'opacity'),
100
+ prefix_cls_has_op_70: /opacity-70/.test(restProbe.prefixCls || ''), // R335
101
+ count_cls_has_tabular: /tabular-nums/.test(restProbe.countCls || ''), // R323
102
+ pill_cursor_pointer: restProbe.pillCursor === 'pointer',
103
+ hover_prefix_1: approxEq(hoverProbe.prefixOpacity, 1),
104
+ hover_count_1: approxEq(hoverProbe.countOpacity, 1),
105
+ };
106
+ const ok = Object.values(results).every(Boolean);
107
+ console.log(`${ok ? '✅' : '❌'} filter pill hover-opacity lift:`, JSON.stringify(results),
108
+ '\n rest: ', restProbe,
109
+ '\n hover:', hoverProbe);
110
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,99 @@
1
+ /* Round 356 verification: filter pin pill × buttons gain hover:scale-
2
+ * 110 (Tailwind 4 modern CSS `scale` property). Pre-R356 the × had
3
+ * only hover:opacity-70 — target dimmed under cursor but didn't
4
+ * lift. R356 adds a 10 % scale so the click-target reads as "press
5
+ * me" alongside the dim. Sibling polish to R354 vendor letter glyph
6
+ * + R350/R352/R353 chrome icon hover-scales. replace_all touched
7
+ * all 4 filter pin pill × buttons (status / group / vendor / edge).
8
+ *
9
+ * Tailwind 4 compiles scale-110 to the modern CSS `scale` property
10
+ * — probes getComputedStyle(el).scale (verified during R352).
11
+ *
12
+ * Contract (cyber, status filter pinned to 'working'):
13
+ * - Rest: × button computed scale 'none' (no scale applied).
14
+ * - Hover ×: scale === '1.1'.
15
+ * - Inline transition (computed) contains scale/transform.
16
+ * - Pre-R356 invariants: hover:opacity-70 still applies (button
17
+ * dims on hover), cursor: pointer, data-active-filter attr on
18
+ * parent pill still intact.
19
+ */
20
+ import { chromium } from 'playwright';
21
+ import { readFileSync } from 'node:fs';
22
+
23
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
24
+ const browser = await chromium.launch({ headless: true });
25
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
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
+ sessionStorage.setItem('anet_v3_auth', '1');
31
+ localStorage.setItem('anet-pinnedStatus', JSON.stringify('working'));
32
+ } catch {}
33
+ });
34
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
35
+ await ctx.route('**/api/hub/status*', async (route) => {
36
+ const r = await route.fetch();
37
+ const b = await r.json();
38
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
39
+ const mk = (alias) => ({
40
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
41
+ network_id: nid, project_dir: null,
42
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
43
+ });
44
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('a'), mk('b'), mk('c') ] } });
45
+ });
46
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
47
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
48
+
49
+ const page = await ctx.newPage();
50
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
51
+ await page.waitForSelector('[data-working-chip]', { timeout: 15000 });
52
+ const pillVisible = await page.locator('[data-active-filter="status"]').count();
53
+ if (pillVisible === 0) {
54
+ await page.click('[data-working-chip]');
55
+ await page.waitForSelector('[data-active-filter="status"]', { timeout: 5000 });
56
+ }
57
+ await page.waitForTimeout(300);
58
+
59
+ const restProbe = await page.evaluate(() => {
60
+ const pill = document.querySelector('[data-active-filter="status"]');
61
+ const x = pill?.querySelector('button[aria-label^="Clear "]');
62
+ const cs = x ? getComputedStyle(x) : null;
63
+ return {
64
+ scale: cs?.scale ?? null,
65
+ transition: cs?.transition ?? null,
66
+ cursor: cs?.cursor ?? null,
67
+ className: x?.getAttribute('class') ?? null,
68
+ pillAttr: pill?.getAttribute('data-active-filter') ?? null,
69
+ };
70
+ });
71
+
72
+ await page.hover('[data-active-filter="status"] button[aria-label^="Clear "]');
73
+ await page.waitForTimeout(300);
74
+ const hoverProbe = await page.evaluate(() => {
75
+ const x = document.querySelector('[data-active-filter="status"] button[aria-label^="Clear "]');
76
+ return { scale: x ? getComputedStyle(x).scale : null };
77
+ });
78
+
79
+ await browser.close();
80
+
81
+ const isRestScale = (s) => s === 'none' || s === '1' || s === '1 1' || s === null;
82
+ const isHoverScale110 = (s) => s === '1.1' || s === '1.1 1.1';
83
+ const hasTrans = (s, prop) =>
84
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
85
+
86
+ const results = {
87
+ rest_scale_1: isRestScale(restProbe.scale),
88
+ trans_has_scale: hasTrans(restProbe.transition, 'scale') || hasTrans(restProbe.transition, 'transform'),
89
+ cursor_pointer: restProbe.cursor === 'pointer',
90
+ cls_has_hover_op_70: /hover:opacity-70/.test(restProbe.className || ''), // R343
91
+ cls_has_hover_scale: /hover:scale-110/.test(restProbe.className || ''),
92
+ pill_attr_status: restProbe.pillAttr === 'status',
93
+ hover_scale_110: isHoverScale110(hoverProbe.scale),
94
+ };
95
+ const ok = Object.values(results).every(Boolean);
96
+ console.log(`${ok ? '✅' : '❌'} filter pill × hover-scale:`, JSON.stringify(results),
97
+ '\n rest: ', restProbe,
98
+ '\n hover: ', hoverProbe);
99
+ process.exit(ok ? 0 : 1);