@sleep2agi/agent-network-dashboard 0.5.3-preview.66 → 0.5.3-preview.68

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 (157) 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 +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  138. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  139. package/.next/server/middleware-build-manifest.js +3 -3
  140. package/.next/server/pages/404.html +2 -2
  141. package/.next/server/pages/500.html +1 -1
  142. package/.next/static/chunks/{0.jxmrrhb0uvn.js → 0.fbxon97s7eu.js} +1 -1
  143. package/.next/static/chunks/01qm1uk6u63f-.css +2 -0
  144. package/.next/static/chunks/{15e12eor4m~eo.js → 06isbzbn35ygc.js} +1 -1
  145. package/.next/static/chunks/{11bbfqph3afaw.js → 0oqxy84n-zg2a.js} +1 -1
  146. package/.next/static/chunks/{0kygkfx-s~8ac.js → 0rmvy9f3wj~q-.js} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +67 -3
  150. package/app/globals.css +26 -0
  151. package/package.json +1 -1
  152. package/scripts/topo-brand-logo-breath-test.mjs +102 -0
  153. package/scripts/topo-titleblock-h2-hover-tracking-test.mjs +128 -0
  154. package/.next/static/chunks/09goheht8rdsk.css +0 -2
  155. /package/.next/static/{hJ6JBZoxnQkbmnhXO77yM → 1nn_A0jk269Etn-OoHl4i}/_buildManifest.js +0 -0
  156. /package/.next/static/{hJ6JBZoxnQkbmnhXO77yM → 1nn_A0jk269Etn-OoHl4i}/_clientMiddlewareManifest.js +0 -0
  157. /package/.next/static/{hJ6JBZoxnQkbmnhXO77yM → 1nn_A0jk269Etn-OoHl4i}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":310,"timestamp":219915250424,"id":4,"parentId":1,"tags":{},"startTime":1779027887497,"traceId":"0568c8260cc3d15e"},{"name":"load-custom-routes","duration":606,"timestamp":219915250907,"id":5,"parentId":1,"tags":{},"startTime":1779027887497,"traceId":"0568c8260cc3d15e"},{"name":"create-dist-dir","duration":776,"timestamp":219915251561,"id":6,"parentId":1,"tags":{},"startTime":1779027887498,"traceId":"0568c8260cc3d15e"},{"name":"clean","duration":33380,"timestamp":219915253065,"id":7,"parentId":1,"tags":{},"startTime":1779027887499,"traceId":"0568c8260cc3d15e"},{"name":"discover-routes","duration":26461,"timestamp":219915380255,"id":8,"parentId":1,"tags":{},"startTime":1779027887627,"traceId":"0568c8260cc3d15e"},{"name":"create-root-mapping","duration":147,"timestamp":219915406782,"id":9,"parentId":1,"tags":{},"startTime":1779027887653,"traceId":"0568c8260cc3d15e"},{"name":"generate-route-types","duration":23628,"timestamp":219915409969,"id":10,"parentId":1,"tags":{},"startTime":1779027887656,"traceId":"0568c8260cc3d15e"},{"name":"public-dir-conflict-check","duration":100,"timestamp":219915433691,"id":11,"parentId":1,"tags":{},"startTime":1779027887680,"traceId":"0568c8260cc3d15e"},{"name":"generate-routes-manifest","duration":5792,"timestamp":219915433938,"id":12,"parentId":1,"tags":{},"startTime":1779027887680,"traceId":"0568c8260cc3d15e"},{"name":"run-turbopack","duration":8180005,"timestamp":219915446763,"id":14,"parentId":1,"tags":{},"startTime":1779027887693,"traceId":"0568c8260cc3d15e"},{"name":"turbopack-build-events","duration":135,"timestamp":219915774958,"id":15,"parentId":1,"tags":{},"startTime":1779027888021,"traceId":"0568c8260cc3d15e"},{"name":"run-typescript","duration":12614425,"timestamp":219923640117,"id":16,"parentId":1,"tags":{},"startTime":1779027895886,"traceId":"0568c8260cc3d15e"},{"name":"generate-required-server-files","duration":3199,"timestamp":219936256351,"id":18,"parentId":1,"tags":{},"startTime":1779027908503,"traceId":"0568c8260cc3d15e"},{"name":"check-static-error-page","duration":26066,"timestamp":219936567359,"id":20,"parentId":19,"tags":{},"startTime":1779027908814,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":580757,"timestamp":219936601818,"id":65,"parentId":22,"tags":{},"startTime":1779027908848,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":611658,"timestamp":219936571072,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779027908817,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":779407,"timestamp":219936603169,"id":69,"parentId":28,"tags":{},"startTime":1779027908849,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":807563,"timestamp":219936575113,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779027908821,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":780961,"timestamp":219936601969,"id":66,"parentId":25,"tags":{},"startTime":1779027908848,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":808362,"timestamp":219936574610,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779027908821,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":789892,"timestamp":219936603026,"id":68,"parentId":27,"tags":{},"startTime":1779027908849,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":818021,"timestamp":219936574953,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779027908821,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":804451,"timestamp":219936601413,"id":64,"parentId":21,"tags":{},"startTime":1779027908848,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":836797,"timestamp":219936569144,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779027908815,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":812086,"timestamp":219936608122,"id":73,"parentId":33,"tags":{},"startTime":1779027908854,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":844094,"timestamp":219936576185,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779027908822,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":812788,"timestamp":219936607798,"id":71,"parentId":30,"tags":{},"startTime":1779027908854,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":845146,"timestamp":219936575495,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779027908822,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":823539,"timestamp":219936608248,"id":76,"parentId":36,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":854720,"timestamp":219936577301,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779027908824,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":824004,"timestamp":219936608277,"id":77,"parentId":37,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":854710,"timestamp":219936577622,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779027908824,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":830214,"timestamp":219936607891,"id":72,"parentId":32,"tags":{},"startTime":1779027908854,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":862137,"timestamp":219936576021,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779027908822,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":835133,"timestamp":219936608318,"id":80,"parentId":40,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":865488,"timestamp":219936578016,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779027908824,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":838925,"timestamp":219936608207,"id":74,"parentId":34,"tags":{},"startTime":1779027908854,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":870660,"timestamp":219936576520,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779027908823,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":839057,"timestamp":219936608290,"id":78,"parentId":38,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":869605,"timestamp":219936577775,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779027908824,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":845847,"timestamp":219936608305,"id":79,"parentId":39,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":876781,"timestamp":219936577895,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779027908824,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":849485,"timestamp":219936608369,"id":84,"parentId":46,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":878801,"timestamp":219936579094,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779027908825,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":850619,"timestamp":219936608354,"id":83,"parentId":45,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":880080,"timestamp":219936578949,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779027908825,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":854805,"timestamp":219936608341,"id":82,"parentId":44,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":884391,"timestamp":219936578807,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779027908825,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":856638,"timestamp":219936608397,"id":86,"parentId":48,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":876849,"timestamp":219936588231,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779027908835,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":858793,"timestamp":219936608380,"id":85,"parentId":47,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":879128,"timestamp":219936588091,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779027908834,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":860278,"timestamp":219936608332,"id":81,"parentId":42,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":890277,"timestamp":219936578394,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779027908825,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":866638,"timestamp":219936608424,"id":88,"parentId":50,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":886653,"timestamp":219936588462,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779027908835,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":864690,"timestamp":219936613928,"id":91,"parentId":31,"tags":{},"startTime":1779027908860,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":903004,"timestamp":219936575659,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779027908822,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":867631,"timestamp":219936612608,"id":90,"parentId":24,"tags":{},"startTime":1779027908859,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":908598,"timestamp":219936571683,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779027908818,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":875305,"timestamp":219936608433,"id":89,"parentId":51,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":895220,"timestamp":219936588562,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779027908835,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":868108,"timestamp":219936616705,"id":93,"parentId":43,"tags":{},"startTime":1779027908863,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":906343,"timestamp":219936578526,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779027908825,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":876712,"timestamp":219936608410,"id":87,"parentId":49,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":896795,"timestamp":219936588364,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779027908835,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":884262,"timestamp":219936603495,"id":70,"parentId":29,"tags":{},"startTime":1779027908850,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":912533,"timestamp":219936575263,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779027908822,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":899631,"timestamp":219936608230,"id":75,"parentId":35,"tags":{},"startTime":1779027908855,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":931209,"timestamp":219936576714,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779027908823,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":901877,"timestamp":219936615334,"id":92,"parentId":41,"tags":{},"startTime":1779027908862,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":939158,"timestamp":219936578116,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779027908824,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":915526,"timestamp":219936619118,"id":98,"parentId":55,"tags":{},"startTime":1779027908865,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":945068,"timestamp":219936589645,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779027908836,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":930021,"timestamp":219936619028,"id":94,"parentId":23,"tags":{},"startTime":1779027908865,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":977704,"timestamp":219936571409,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779027908818,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":933643,"timestamp":219936619079,"id":96,"parentId":53,"tags":{},"startTime":1779027908865,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":963486,"timestamp":219936589292,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779027908836,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":939003,"timestamp":219936619260,"id":101,"parentId":59,"tags":{},"startTime":1779027908866,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":967434,"timestamp":219936590906,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779027908837,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":940784,"timestamp":219936619148,"id":100,"parentId":58,"tags":{},"startTime":1779027908865,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":969301,"timestamp":219936590682,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779027908837,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":950533,"timestamp":219936619282,"id":102,"parentId":61,"tags":{},"startTime":1779027908866,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":981244,"timestamp":219936592608,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779027908839,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":954779,"timestamp":219936619296,"id":103,"parentId":62,"tags":{},"startTime":1779027908866,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":981192,"timestamp":219936592925,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779027908839,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":954892,"timestamp":219936619305,"id":104,"parentId":63,"tags":{},"startTime":1779027908866,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":981087,"timestamp":219936593138,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779027908839,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":947890,"timestamp":219936631784,"id":105,"parentId":60,"tags":{},"startTime":1779027908878,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":987585,"timestamp":219936592129,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779027908838,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":933399,"timestamp":219936648654,"id":106,"parentId":57,"tags":{},"startTime":1779027908895,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":991985,"timestamp":219936590105,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779027908836,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":970160,"timestamp":219936619133,"id":99,"parentId":56,"tags":{},"startTime":1779027908865,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":999491,"timestamp":219936589856,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779027908836,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":982493,"timestamp":219936619088,"id":97,"parentId":54,"tags":{},"startTime":1779027908865,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":1012203,"timestamp":219936589448,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779027908836,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":989669,"timestamp":219936619059,"id":95,"parentId":52,"tags":{},"startTime":1779027908865,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":1019659,"timestamp":219936589115,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779027908835,"traceId":"0568c8260cc3d15e"},{"name":"is-page-static","duration":1013505,"timestamp":219936602816,"id":67,"parentId":26,"tags":{},"startTime":1779027908849,"traceId":"0568c8260cc3d15e"},{"name":"check-page","duration":1041579,"timestamp":219936574797,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779027908821,"traceId":"0568c8260cc3d15e"},{"name":"static-check","duration":1050302,"timestamp":219936566137,"id":19,"parentId":1,"tags":{},"startTime":1779027908812,"traceId":"0568c8260cc3d15e"}]
2
- [{"name":"write-routes-manifest","duration":682,"timestamp":219937629288,"id":108,"parentId":1,"tags":{},"startTime":1779027909876,"traceId":"0568c8260cc3d15e"},{"name":"load-dotenv","duration":67,"timestamp":219937643543,"id":111,"parentId":110,"tags":{},"startTime":1779027909890,"traceId":"0568c8260cc3d15e"},{"name":"run-export-path-map","duration":836,"timestamp":219937648510,"id":112,"parentId":110,"tags":{},"startTime":1779027909895,"traceId":"0568c8260cc3d15e"},{"name":"next-export","duration":737859,"timestamp":219937641658,"id":110,"parentId":1,"tags":{},"startTime":1779027909888,"traceId":"0568c8260cc3d15e"},{"name":"move-exported-app-not-found-","duration":546,"timestamp":219938383537,"id":113,"parentId":109,"tags":{},"startTime":1779027910630,"traceId":"0568c8260cc3d15e"},{"name":"move-exported-app-global-error-","duration":350,"timestamp":219938384175,"id":114,"parentId":109,"tags":{},"startTime":1779027910630,"traceId":"0568c8260cc3d15e"},{"name":"static-generation","duration":751270,"timestamp":219937635039,"id":109,"parentId":1,"tags":{},"startTime":1779027909881,"traceId":"0568c8260cc3d15e"},{"name":"write-routes-manifest","duration":391,"timestamp":219938386539,"id":115,"parentId":1,"tags":{},"startTime":1779027910633,"traceId":"0568c8260cc3d15e"},{"name":"print-tree-view","duration":5124,"timestamp":219938400636,"id":116,"parentId":1,"tags":{},"startTime":1779027910647,"traceId":"0568c8260cc3d15e"},{"name":"write-route-bundle-stats","duration":16796,"timestamp":219938405795,"id":117,"parentId":1,"tags":{},"startTime":1779027910652,"traceId":"0568c8260cc3d15e"},{"name":"telemetry-flush","duration":28285,"timestamp":219938422619,"id":118,"parentId":1,"tags":{},"startTime":1779027910669,"traceId":"0568c8260cc3d15e"},{"name":"next-build","duration":23258610,"timestamp":219915192328,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779027887439,"traceId":"0568c8260cc3d15e"}]
1
+ [{"name":"generate-buildid","duration":360,"timestamp":220554380734,"id":4,"parentId":1,"tags":{},"startTime":1779028526627,"traceId":"6f41a1ccaef9c922"},{"name":"load-custom-routes","duration":620,"timestamp":220554381279,"id":5,"parentId":1,"tags":{},"startTime":1779028526628,"traceId":"6f41a1ccaef9c922"},{"name":"create-dist-dir","duration":948,"timestamp":220554381961,"id":6,"parentId":1,"tags":{},"startTime":1779028526628,"traceId":"6f41a1ccaef9c922"},{"name":"clean","duration":36209,"timestamp":220554383710,"id":7,"parentId":1,"tags":{},"startTime":1779028526630,"traceId":"6f41a1ccaef9c922"},{"name":"discover-routes","duration":10627,"timestamp":220554512326,"id":8,"parentId":1,"tags":{},"startTime":1779028526759,"traceId":"6f41a1ccaef9c922"},{"name":"create-root-mapping","duration":129,"timestamp":220554523038,"id":9,"parentId":1,"tags":{},"startTime":1779028526769,"traceId":"6f41a1ccaef9c922"},{"name":"generate-route-types","duration":35531,"timestamp":220554525566,"id":10,"parentId":1,"tags":{},"startTime":1779028526772,"traceId":"6f41a1ccaef9c922"},{"name":"public-dir-conflict-check","duration":100,"timestamp":220554561196,"id":11,"parentId":1,"tags":{},"startTime":1779028526807,"traceId":"6f41a1ccaef9c922"},{"name":"generate-routes-manifest","duration":4445,"timestamp":220554561411,"id":12,"parentId":1,"tags":{},"startTime":1779028526808,"traceId":"6f41a1ccaef9c922"},{"name":"run-turbopack","duration":6535196,"timestamp":220554571534,"id":14,"parentId":1,"tags":{},"startTime":1779028526818,"traceId":"6f41a1ccaef9c922"},{"name":"turbopack-build-events","duration":114,"timestamp":220554924364,"id":15,"parentId":1,"tags":{},"startTime":1779028527171,"traceId":"6f41a1ccaef9c922"},{"name":"run-typescript","duration":9585488,"timestamp":220561121098,"id":16,"parentId":1,"tags":{},"startTime":1779028533367,"traceId":"6f41a1ccaef9c922"},{"name":"generate-required-server-files","duration":2451,"timestamp":220570707757,"id":18,"parentId":1,"tags":{},"startTime":1779028542954,"traceId":"6f41a1ccaef9c922"},{"name":"check-static-error-page","duration":19216,"timestamp":220570867385,"id":20,"parentId":19,"tags":{},"startTime":1779028543114,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":481961,"timestamp":220570889748,"id":65,"parentId":22,"tags":{},"startTime":1779028543136,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":501301,"timestamp":220570870591,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779028543117,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":580193,"timestamp":220570889857,"id":66,"parentId":25,"tags":{},"startTime":1779028543136,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":595869,"timestamp":220570874282,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779028543121,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":603698,"timestamp":220570890227,"id":69,"parentId":28,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":619287,"timestamp":220570874731,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779028543121,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":611625,"timestamp":220570890720,"id":72,"parentId":32,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":627092,"timestamp":220570875415,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779028543122,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":619586,"timestamp":220570890490,"id":70,"parentId":29,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":635295,"timestamp":220570874850,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779028543121,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":629523,"timestamp":220570890993,"id":74,"parentId":34,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":643928,"timestamp":220570876658,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779028543123,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":638540,"timestamp":220570891057,"id":76,"parentId":36,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":652207,"timestamp":220570877467,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779028543124,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":647346,"timestamp":220570889979,"id":67,"parentId":26,"tags":{},"startTime":1779028543136,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":662922,"timestamp":220570874475,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779028543121,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":646890,"timestamp":220570890901,"id":73,"parentId":33,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":661389,"timestamp":220570876490,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779028543123,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":648016,"timestamp":220570890110,"id":68,"parentId":27,"tags":{},"startTime":1779028543136,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":663569,"timestamp":220570874604,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779028543121,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":647242,"timestamp":220570891088,"id":77,"parentId":37,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":660691,"timestamp":220570877679,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779028543124,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":648136,"timestamp":220570891038,"id":75,"parentId":35,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":662397,"timestamp":220570876823,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779028543123,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":654329,"timestamp":220570890656,"id":71,"parentId":30,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":670023,"timestamp":220570875026,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779028543121,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":661084,"timestamp":220570891163,"id":82,"parentId":44,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":673274,"timestamp":220570879022,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779028543125,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":673075,"timestamp":220570891177,"id":83,"parentId":45,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":685125,"timestamp":220570879181,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779028543125,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":673318,"timestamp":220570891154,"id":81,"parentId":42,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":685978,"timestamp":220570878545,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779028543125,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":677585,"timestamp":220570891139,"id":80,"parentId":40,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":690657,"timestamp":220570878130,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779028543124,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":677849,"timestamp":220570891124,"id":79,"parentId":39,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":691055,"timestamp":220570877985,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779028543124,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":679011,"timestamp":220570891190,"id":84,"parentId":46,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":690999,"timestamp":220570879304,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779028543126,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":683138,"timestamp":220570891250,"id":89,"parentId":51,"tags":{},"startTime":1779028543138,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":691904,"timestamp":220570882536,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779028543129,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":684244,"timestamp":220570891203,"id":85,"parentId":47,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":696057,"timestamp":220570879438,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779028543126,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":685663,"timestamp":220570891213,"id":86,"parentId":48,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":697356,"timestamp":220570879574,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779028543126,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":672131,"timestamp":220570908218,"id":91,"parentId":31,"tags":{},"startTime":1779028543154,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":705237,"timestamp":220570875160,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779028543121,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":678942,"timestamp":220570901639,"id":90,"parentId":24,"tags":{},"startTime":1779028543148,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":709403,"timestamp":220570871209,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779028543117,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":691013,"timestamp":220570891112,"id":78,"parentId":38,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":704319,"timestamp":220570877846,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779028543124,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":691070,"timestamp":220570891241,"id":88,"parentId":50,"tags":{},"startTime":1779028543138,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":699914,"timestamp":220570882426,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779028543129,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":691230,"timestamp":220570891226,"id":87,"parentId":49,"tags":{},"startTime":1779028543137,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":700213,"timestamp":220570882268,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779028543129,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":672331,"timestamp":220570912751,"id":92,"parentId":41,"tags":{},"startTime":1779028543159,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":706882,"timestamp":220570878248,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779028543125,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":665233,"timestamp":220570920069,"id":93,"parentId":43,"tags":{},"startTime":1779028543166,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":706635,"timestamp":220570878698,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779028543125,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":701881,"timestamp":220570889454,"id":64,"parentId":21,"tags":{},"startTime":1779028543136,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":722401,"timestamp":220570868981,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779028543115,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":672383,"timestamp":220570927682,"id":100,"parentId":58,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":715374,"timestamp":220570884740,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779028543131,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":714522,"timestamp":220570927796,"id":101,"parentId":59,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":756666,"timestamp":220570885706,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779028543132,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":714866,"timestamp":220570927630,"id":96,"parentId":53,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":759327,"timestamp":220570883202,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779028543129,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":714968,"timestamp":220570927655,"id":98,"parentId":55,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":759032,"timestamp":220570883617,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779028543130,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":719450,"timestamp":220570927642,"id":97,"parentId":54,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":763775,"timestamp":220570883383,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779028543130,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":721416,"timestamp":220570927582,"id":94,"parentId":23,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":778130,"timestamp":220570870931,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779028543117,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":721348,"timestamp":220570927815,"id":102,"parentId":61,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":762971,"timestamp":220570886230,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779028543133,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":722461,"timestamp":220570927840,"id":104,"parentId":63,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":763916,"timestamp":220570886434,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779028543133,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":696587,"timestamp":220570954237,"id":105,"parentId":60,"tags":{},"startTime":1779028543201,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":764987,"timestamp":220570885890,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779028543132,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":727987,"timestamp":220570927829,"id":103,"parentId":62,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":769536,"timestamp":220570886340,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779028543133,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":685519,"timestamp":220570971158,"id":106,"parentId":57,"tags":{},"startTime":1779028543217,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":772551,"timestamp":220570884152,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779028543130,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":729538,"timestamp":220570927614,"id":95,"parentId":52,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":774194,"timestamp":220570882987,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779028543129,"traceId":"6f41a1ccaef9c922"},{"name":"is-page-static","duration":732782,"timestamp":220570927672,"id":99,"parentId":56,"tags":{},"startTime":1779028543174,"traceId":"6f41a1ccaef9c922"},{"name":"check-page","duration":776639,"timestamp":220570883846,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779028543130,"traceId":"6f41a1ccaef9c922"},{"name":"static-check","duration":794249,"timestamp":220570866272,"id":19,"parentId":1,"tags":{},"startTime":1779028543113,"traceId":"6f41a1ccaef9c922"}]
2
+ [{"name":"write-routes-manifest","duration":1302,"timestamp":220571669988,"id":108,"parentId":1,"tags":{},"startTime":1779028543916,"traceId":"6f41a1ccaef9c922"},{"name":"load-dotenv","duration":53,"timestamp":220571683462,"id":111,"parentId":110,"tags":{},"startTime":1779028543930,"traceId":"6f41a1ccaef9c922"},{"name":"run-export-path-map","duration":523,"timestamp":220571686026,"id":112,"parentId":110,"tags":{},"startTime":1779028543932,"traceId":"6f41a1ccaef9c922"},{"name":"next-export","duration":576387,"timestamp":220571682203,"id":110,"parentId":1,"tags":{},"startTime":1779028543928,"traceId":"6f41a1ccaef9c922"},{"name":"move-exported-app-not-found-","duration":585,"timestamp":220572261581,"id":113,"parentId":109,"tags":{},"startTime":1779028544508,"traceId":"6f41a1ccaef9c922"},{"name":"move-exported-app-global-error-","duration":521,"timestamp":220572262309,"id":114,"parentId":109,"tags":{},"startTime":1779028544509,"traceId":"6f41a1ccaef9c922"},{"name":"static-generation","duration":589331,"timestamp":220571675882,"id":109,"parentId":1,"tags":{},"startTime":1779028543922,"traceId":"6f41a1ccaef9c922"},{"name":"write-routes-manifest","duration":376,"timestamp":220572265440,"id":115,"parentId":1,"tags":{},"startTime":1779028544512,"traceId":"6f41a1ccaef9c922"},{"name":"print-tree-view","duration":5390,"timestamp":220572283212,"id":116,"parentId":1,"tags":{},"startTime":1779028544529,"traceId":"6f41a1ccaef9c922"},{"name":"write-route-bundle-stats","duration":13085,"timestamp":220572288635,"id":117,"parentId":1,"tags":{},"startTime":1779028544535,"traceId":"6f41a1ccaef9c922"},{"name":"telemetry-flush","duration":19884,"timestamp":220572301747,"id":118,"parentId":1,"tags":{},"startTime":1779028544548,"traceId":"6f41a1ccaef9c922"},{"name":"next-build","duration":17998392,"timestamp":220554323274,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779028526570,"traceId":"6f41a1ccaef9c922"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":8180005,"timestamp":219915446763,"id":14,"parentId":1,"tags":{},"startTime":1779027887693,"traceId":"0568c8260cc3d15e"},{"name":"turbopack-build-events","duration":135,"timestamp":219915774958,"id":15,"parentId":1,"tags":{},"startTime":1779027888021,"traceId":"0568c8260cc3d15e"},{"name":"run-typescript","duration":12614425,"timestamp":219923640117,"id":16,"parentId":1,"tags":{},"startTime":1779027895886,"traceId":"0568c8260cc3d15e"},{"name":"static-check","duration":1050302,"timestamp":219936566137,"id":19,"parentId":1,"tags":{},"startTime":1779027908812,"traceId":"0568c8260cc3d15e"},{"name":"static-generation","duration":751270,"timestamp":219937635039,"id":109,"parentId":1,"tags":{},"startTime":1779027909881,"traceId":"0568c8260cc3d15e"},{"name":"telemetry-flush","duration":28285,"timestamp":219938422619,"id":118,"parentId":1,"tags":{},"startTime":1779027910669,"traceId":"0568c8260cc3d15e"},{"name":"next-build","duration":23258610,"timestamp":219915192328,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779027887439,"traceId":"0568c8260cc3d15e"}]
1
+ [{"name":"run-turbopack","duration":6535196,"timestamp":220554571534,"id":14,"parentId":1,"tags":{},"startTime":1779028526818,"traceId":"6f41a1ccaef9c922"},{"name":"turbopack-build-events","duration":114,"timestamp":220554924364,"id":15,"parentId":1,"tags":{},"startTime":1779028527171,"traceId":"6f41a1ccaef9c922"},{"name":"run-typescript","duration":9585488,"timestamp":220561121098,"id":16,"parentId":1,"tags":{},"startTime":1779028533367,"traceId":"6f41a1ccaef9c922"},{"name":"static-check","duration":794249,"timestamp":220570866272,"id":19,"parentId":1,"tags":{},"startTime":1779028543113,"traceId":"6f41a1ccaef9c922"},{"name":"static-generation","duration":589331,"timestamp":220571675882,"id":109,"parentId":1,"tags":{},"startTime":1779028543922,"traceId":"6f41a1ccaef9c922"},{"name":"telemetry-flush","duration":19884,"timestamp":220572301747,"id":118,"parentId":1,"tags":{},"startTime":1779028544548,"traceId":"6f41a1ccaef9c922"},{"name":"next-build","duration":17998392,"timestamp":220554323274,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779028526570,"traceId":"6f41a1ccaef9c922"}]
@@ -1725,7 +1725,18 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1725
1725
  width) = 166px total title-block width vs 168px pre-R298 —
1726
1726
  no measurable layout shift, just a deliberate tighter
1727
1727
  grouping. */}
1728
- <div className="flex items-center gap-2.5">
1728
+ {/* Round 554 / Loop — title-block wrapper picks up `group` so
1729
+ the H2 below can subscribe to `group-hover:tracking-tighter`.
1730
+ Pairs with R548/R549 brand-logo hover gestures: cursor
1731
+ sweeping anywhere across the title cluster fires the brand
1732
+ logo's scale-105 + rotate-6 + breath ↔ AND tightens the
1733
+ H2's tracking from -0.025em → -0.05em.
1734
+ Makes the title-block read as one coherent hover cluster —
1735
+ brand mark provides the loud gesture (scale + rotate), H2
1736
+ provides the subtle editorial gesture (kerning tighten).
1737
+ data-topo-section-titleblock-group attr surfaces the gate
1738
+ for tests. */}
1739
+ <div className="group flex items-center gap-2.5" data-topo-section-titleblock-group>
1729
1740
  {/* Round 297 / Loop: brand-logo color picks up the 200ms ease-
1730
1741
  out transition. Pre-R297 the moon glyph had theme-
1731
1742
  conditional color (cyber #67e8f9 cyan ↔ light #0d9488
@@ -1802,12 +1813,36 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1802
1813
  landing rotation for tests. Pair with R548's
1803
1814
  data-topo-brand-logo-hover-scale attr — both attrs
1804
1815
  advertise the dual-axis hover signature. */}
1816
+ {/* Round 553 / Loop — title-block brand logo gains subtle
1817
+ idle opacity breath (~0.92 ↔ 1, 5s ease-in-out cycle).
1818
+ 5th anchor in the 呼吸感 breath family, slotting into
1819
+ the ascending cadence ladder between hub idle (4s) and
1820
+ watermark (6s):
1821
+ row hot 3s
1822
+ hub idle 4s
1823
+ brand logo 5s ← this round
1824
+ watermark 6s
1825
+ crescent 7s
1826
+ Composes cleanly with R548 hover:scale-105 + R549
1827
+ hover:rotate-6 — opacity, scale, and rotate are
1828
+ independent CSS properties; the moon keeps breathing
1829
+ as it scales and rotates on hover. Layered effect
1830
+ reads as "this brand mark is alive even before you
1831
+ touch it, and lights up further on hover".
1832
+ Reduced-motion gate: component-side `!reducedMotion`
1833
+ toggles the className (canonical TopoGraph breath
1834
+ pattern); R29 globals.css blanket provides a
1835
+ defense-in-depth fallback (animation-duration →
1836
+ 0.001ms under prefers-reduced-motion: reduce).
1837
+ data-topo-brand-logo-breath attr exposes the gate
1838
+ state for tests. */}
1805
1839
  <svg
1806
1840
  width="40" height="40" viewBox="0 0 32 32" aria-hidden
1807
- className="shrink-0 transition-transform duration-200 ease-out hover:scale-105 hover:rotate-6 transform-gpu"
1841
+ className={`shrink-0 transition-transform duration-200 ease-out hover:scale-105 hover:rotate-6 transform-gpu${!reducedMotion ? ' anet-topo-brand-logo-breath' : ''}`}
1808
1842
  data-topo-brand-logo
1809
1843
  data-topo-brand-logo-hover-scale="1.05"
1810
1844
  data-topo-brand-logo-hover-rotate="6deg"
1845
+ data-topo-brand-logo-breath={!reducedMotion ? 'true' : 'false'}
1811
1846
  style={{
1812
1847
  color: isLight ? '#0d9488' : '#67e8f9',
1813
1848
  cursor: 'default',
@@ -1871,7 +1906,36 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1871
1906
  cumulatively legible across 12 characters. font-semibold
1872
1907
  (600) stays — tracking-tight does the heavy lifting for
1873
1908
  the editorial register. */}
1874
- <h2 className="text-lg text-white font-semibold leading-tight tracking-tight" data-topo-section-title>Command mesh</h2>
1909
+ {/* Round 554 / Loop — H2 "Command mesh" gains group-hover-
1910
+ gated tracking-tighter via the wrapper's R554 `group`
1911
+ flag. Pre-R554 the H2 was fully static (R286 tracking-
1912
+ tight only at rest). R554 adds an editorial-tighten
1913
+ gesture: when cursor sweeps anywhere across the title
1914
+ cluster (brand logo OR title text), the headline tightens
1915
+ from -0.025em → -0.05em.
1916
+ Inverts the typical hover-letter-spacing direction:
1917
+ small labels (chip counts, panel titles, edge digits)
1918
+ SPREAD on hover → "data telegraphing"
1919
+ large headlines (h2 Command mesh)
1920
+ TIGHTEN on hover → "editorial emphasis"
1921
+ Both directions are coherent design language — small
1922
+ data wants spacing for legibility; large headlines want
1923
+ tightening for designed-headline polish. Same idiom as
1924
+ the conventional editorial pairing of "wide kicker +
1925
+ tight headline" R285/R286 set up (kicker spreads 0.1em
1926
+ tracking-widest; headline tightens -0.025em tracking-
1927
+ tight) — R554 deepens that pairing's tighten side at
1928
+ the hover-state tier.
1929
+ At text-lg (18px) the shift is -0.45px → -0.9px per
1930
+ gap (~5.4px total tightening across "Command mesh" 12
1931
+ chars). Subtle but legible when the cursor sweeps in.
1932
+ transition-[letter-spacing] duration-200 ease-out
1933
+ matches the 200ms hover-ls cadence used at R344/R345/
1934
+ R347/R351/R420/R427/R431/R432/R434/R527/R539 family
1935
+ anchors.
1936
+ data-topo-section-title-hover-tracking attr surfaces
1937
+ the landing tracking class for tests. */}
1938
+ <h2 className="text-lg text-white font-semibold leading-tight tracking-tight group-hover:tracking-tighter transition-[letter-spacing] duration-200 ease-out" data-topo-section-title data-topo-section-title-hover-tracking="tracking-tighter">Command mesh</h2>
1875
1939
  </div>
1876
1940
  </div>
1877
1941
  {/* Round 328 / Loop: chip-row strip wrapper gap 2 → 2.5
package/app/globals.css CHANGED
@@ -1074,6 +1074,32 @@ body {
1074
1074
  animation-iteration-count: infinite;
1075
1075
  }
1076
1076
 
1077
+ /* Round 553 — title-block brand logo subtle idle breath.
1078
+ 5th anchor in the 呼吸感 breath family — cadence ladder:
1079
+ row hot 3s
1080
+ hub idle 4s
1081
+ brand logo 5s ← this round
1082
+ watermark 6s
1083
+ crescent 7s
1084
+ Pure opacity breath (0.92 ↔ 1, ~8% delta) on the title-block
1085
+ crescent SVG so the brand mark reads as a "living mark" at
1086
+ rest. Composes cleanly with R548 hover:scale-105 +
1087
+ R549 hover:rotate-6 (independent properties: opacity vs
1088
+ scale/rotate; the moon keeps breathing as it lifts on hover).
1089
+ prefers-reduced-motion handled by R29 blanket override —
1090
+ animation-duration → 0.001ms neutralises the keyframe without
1091
+ killing the static opacity baseline. Component-side gate also
1092
+ applied (`!reducedMotion` toggles the className) as canonical
1093
+ TopoGraph breath pattern (sibling to R130 hub idle / R519
1094
+ watermark / R326 crescent breath gates). */
1095
+ @keyframes anet-topo-brand-logo-breath-kf {
1096
+ 0%, 100% { opacity: 1; }
1097
+ 50% { opacity: 0.92; }
1098
+ }
1099
+ .anet-topo-brand-logo-breath {
1100
+ animation: anet-topo-brand-logo-breath-kf 5s ease-in-out infinite;
1101
+ }
1102
+
1077
1103
  /* ─────────────────────────────────────────────────────────────────────
1078
1104
  Round 29 — prefers-reduced-motion a11y sweep
1079
1105
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.66",
3
+ "version": "0.5.3-preview.68",
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,102 @@
1
+ /* Round 553 verification: title-block brand logo gains subtle idle
2
+ * opacity breath (0.92 ↔ 1, 5s cycle). 5th anchor in the 呼吸感
3
+ * breath family.
4
+ *
5
+ * Test phases:
6
+ * 1. brand-logo className contains 'anet-topo-brand-logo-breath'
7
+ * 2. data-topo-brand-logo-breath="true" attr present
8
+ * 3. computed animation-name === 'anet-topo-brand-logo-breath-kf'
9
+ * (paused or running)
10
+ * 4. computed animation-duration === '5s'
11
+ * 5. source-side regex confirms keyframe + class + componentJSX
12
+ */
13
+ import { chromium } from 'playwright';
14
+ import { readFileSync } from 'node:fs';
15
+
16
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
17
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
18
+
19
+ const browser = await chromium.launch({ headless: true });
20
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
21
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
22
+ await ctx.addInitScript(() => {
23
+ try {
24
+ localStorage.setItem('anet-theme', 'cyber');
25
+ localStorage.setItem('anet-topo-layout', 'ring');
26
+ sessionStorage.setItem('anet_v3_auth', '1');
27
+ } catch {}
28
+ });
29
+ await ctx.route('**/api/hub/status*', async (route) => {
30
+ const r = await route.fetch();
31
+ const b = await r.json();
32
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
33
+ const mk = (alias) => ({
34
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
35
+ network_id: nid, project_dir: null,
36
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
37
+ });
38
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1')] } });
39
+ });
40
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
41
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
42
+ const page = await ctx.newPage();
43
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
44
+ await page.waitForSelector('[data-topo-brand-logo]', { timeout: 15000 });
45
+ await page.waitForTimeout(500);
46
+
47
+ const sel = '[data-topo-brand-logo]';
48
+ const probe = await page.evaluate((s) => {
49
+ const el = document.querySelector(s);
50
+ if (!el) return null;
51
+ const cs = getComputedStyle(el);
52
+ return {
53
+ breathAttr: el.getAttribute('data-topo-brand-logo-breath'),
54
+ hasBreathClass: el.classList.contains('anet-topo-brand-logo-breath'),
55
+ animationName: cs.animationName,
56
+ animationDuration: cs.animationDuration,
57
+ animationIterationCount: cs.animationIterationCount,
58
+ animationTimingFunction: cs.animationTimingFunction,
59
+ // Sample opacity twice across ~1.5s to confirm it's actually changing
60
+ opacityNow: parseFloat(cs.opacity),
61
+ };
62
+ }, sel);
63
+
64
+ // Sample opacity at 3 timepoints across the 5s breath cycle
65
+ await page.waitForTimeout(500);
66
+ const opacity_t1 = await page.evaluate((s) => parseFloat(getComputedStyle(document.querySelector(s)).opacity), sel);
67
+ await page.waitForTimeout(900);
68
+ const opacity_t2 = await page.evaluate((s) => parseFloat(getComputedStyle(document.querySelector(s)).opacity), sel);
69
+ await page.waitForTimeout(900);
70
+ const opacity_t3 = await page.evaluate((s) => parseFloat(getComputedStyle(document.querySelector(s)).opacity), sel);
71
+
72
+ await browser.close();
73
+
74
+ const css = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
75
+ const tsx = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
76
+ const sourceKeyframe = /@keyframes anet-topo-brand-logo-breath-kf/.test(css);
77
+ const sourceClass = /\.anet-topo-brand-logo-breath\s*\{[^}]*animation: anet-topo-brand-logo-breath-kf 5s ease-in-out infinite/.test(css);
78
+ const sourceComponent = /\!reducedMotion \? ' anet-topo-brand-logo-breath' : ''/.test(tsx);
79
+ const sourceAttr = /data-topo-brand-logo-breath=\{!reducedMotion \? 'true' : 'false'\}/.test(tsx);
80
+
81
+ // Opacity should oscillate; not all 3 samples identical
82
+ const opacityVaries = new Set([opacity_t1, opacity_t2, opacity_t3].map(o => o.toFixed(3))).size > 1;
83
+
84
+ const results = {
85
+ breath_attr: probe?.breathAttr === 'true',
86
+ has_breath_class: probe?.hasBreathClass === true,
87
+ animation_name_match: probe?.animationName === 'anet-topo-brand-logo-breath-kf',
88
+ animation_duration_5s: probe?.animationDuration === '5s',
89
+ animation_iteration_infinite: probe?.animationIterationCount === 'infinite',
90
+ animation_timing_ease_in_out: probe?.animationTimingFunction === 'ease-in-out',
91
+ opacity_varies_over_time: opacityVaries,
92
+ source_keyframe: sourceKeyframe,
93
+ source_class: sourceClass,
94
+ source_component: sourceComponent,
95
+ source_attr: sourceAttr,
96
+ };
97
+ const ok = Object.values(results).every(Boolean);
98
+ console.log(`${ok ? '✅' : '❌'} R553 brand-logo idle breath (5th anchor in 呼吸感 family):`,
99
+ JSON.stringify(results, null, 2),
100
+ '\n probe:', JSON.stringify(probe),
101
+ `\n opacity samples: ${opacity_t1.toFixed(3)} → ${opacity_t2.toFixed(3)} → ${opacity_t3.toFixed(3)}`);
102
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,128 @@
1
+ /* Round 554 verification: title-block H2 "Command mesh" gains
2
+ * group-hover:tracking-tighter via the wrapper's `group` flag.
3
+ * Hovering the brand logo OR the title text should tighten the
4
+ * H2's kerning from -0.025em → -0.05em.
5
+ *
6
+ * Tailwind tracking utilities map to letter-spacing CSS:
7
+ * tracking-tight -0.025em
8
+ * tracking-tighter -0.05em
9
+ *
10
+ * At text-lg (18px font-size):
11
+ * tracking-tight = -0.45px
12
+ * tracking-tighter = -0.9px
13
+ *
14
+ * Test phases:
15
+ * 1. rest: H2 letter-spacing ≈ -0.45px (tracking-tight)
16
+ * 2. hover brand logo: H2 letter-spacing ≈ -0.9px (tracking-tighter)
17
+ * Verifies group-hover propagation from sibling element.
18
+ * 3. hover H2 itself: letter-spacing ≈ -0.9px (same)
19
+ * 4. source: wrapper has `group`, H2 has group-hover:tracking-tighter
20
+ */
21
+ import { chromium } from 'playwright';
22
+ import { readFileSync } from 'node:fs';
23
+
24
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
25
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
26
+
27
+ const browser = await chromium.launch({ headless: true });
28
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
29
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
30
+ await ctx.addInitScript(() => {
31
+ try {
32
+ localStorage.setItem('anet-theme', 'cyber');
33
+ localStorage.setItem('anet-topo-layout', 'ring');
34
+ sessionStorage.setItem('anet_v3_auth', '1');
35
+ } catch {}
36
+ });
37
+ await ctx.route('**/api/hub/status*', async (route) => {
38
+ const r = await route.fetch();
39
+ const b = await r.json();
40
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
41
+ const mk = (alias) => ({
42
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
43
+ network_id: nid, project_dir: null,
44
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
45
+ });
46
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1')] } });
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-topo-section-title]', { timeout: 15000 });
53
+ await page.waitForTimeout(500);
54
+
55
+ const h2Sel = '[data-topo-section-title]';
56
+ const logoSel = '[data-topo-brand-logo]';
57
+
58
+ const parsePx = (s) => parseFloat((s || '').replace(/px$/, ''));
59
+
60
+ // Phase 1: rest
61
+ const rest = await page.evaluate((s) => {
62
+ const el = document.querySelector(s);
63
+ if (!el) return null;
64
+ const cs = getComputedStyle(el);
65
+ return {
66
+ letterSpacing: cs.letterSpacing,
67
+ transitionProperty: cs.transitionProperty,
68
+ transitionDuration: cs.transitionDuration,
69
+ fontSize: cs.fontSize,
70
+ hoverAttr: el.getAttribute('data-topo-section-title-hover-tracking'),
71
+ };
72
+ }, h2Sel);
73
+
74
+ // Phase 2: hover brand logo (different element, but same group → H2 should tighten)
75
+ await page.hover(logoSel);
76
+ await page.waitForTimeout(400);
77
+ const hoverLogo = await page.evaluate((s) => {
78
+ const el = document.querySelector(s);
79
+ if (!el) return null;
80
+ const cs = getComputedStyle(el);
81
+ return { letterSpacing: cs.letterSpacing };
82
+ }, h2Sel);
83
+
84
+ // Phase 3: hover H2 itself (cross-confirm)
85
+ await page.mouse.move(0, 0);
86
+ await page.waitForTimeout(300);
87
+ await page.hover(h2Sel);
88
+ await page.waitForTimeout(400);
89
+ const hoverH2 = await page.evaluate((s) => {
90
+ const el = document.querySelector(s);
91
+ if (!el) return null;
92
+ const cs = getComputedStyle(el);
93
+ return { letterSpacing: cs.letterSpacing };
94
+ }, h2Sel);
95
+
96
+ await browser.close();
97
+
98
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
99
+ const sourceGroupWrapper = /<div className="group flex items-center gap-2\.5" data-topo-section-titleblock-group>/.test(src);
100
+ const sourceH2HoverTracking = /group-hover:tracking-tighter/.test(src);
101
+ const sourceH2HoverAttr = /data-topo-section-title-hover-tracking="tracking-tighter"/.test(src);
102
+
103
+ // Rest ≈ -0.45px (-0.025em × 18px), hover ≈ -0.9px (-0.05em × 18px)
104
+ const restPx = parsePx(rest?.letterSpacing);
105
+ const hoverLogoPx = parsePx(hoverLogo?.letterSpacing);
106
+ const hoverH2Px = parsePx(hoverH2?.letterSpacing);
107
+
108
+ const results = {
109
+ rest_attr_present: rest?.hoverAttr === 'tracking-tighter',
110
+ rest_tracking_tight: Math.abs(restPx - (-0.45)) < 0.05,
111
+ hover_via_logo_tightens: Math.abs(hoverLogoPx - (-0.9)) < 0.05,
112
+ hover_via_h2_tightens: Math.abs(hoverH2Px - (-0.9)) < 0.05,
113
+ hover_tighter_than_rest: hoverLogoPx < restPx - 0.3,
114
+ transition_has_letter_spacing: /letter-spacing/.test(rest?.transitionProperty || ''),
115
+ transition_duration_200ms: rest?.transitionDuration === '0.2s',
116
+ source_group_wrapper: sourceGroupWrapper,
117
+ source_h2_group_hover: sourceH2HoverTracking,
118
+ source_h2_attr: sourceH2HoverAttr,
119
+ };
120
+ const ok = Object.values(results).every(Boolean);
121
+ console.log(`${ok ? '✅' : '❌'} R554 title-block H2 group-hover:tracking-tighter:`,
122
+ JSON.stringify(results, null, 2),
123
+ `\n rest letter-spacing: ${rest?.letterSpacing} (expect ≈ -0.45px)`,
124
+ `\n hover-via-logo: ${hoverLogo?.letterSpacing} (expect ≈ -0.9px)`,
125
+ `\n hover-via-h2: ${hoverH2?.letterSpacing} (expect ≈ -0.9px)`,
126
+ `\n font-size: ${rest?.fontSize}`,
127
+ `\n transition-property: ${rest?.transitionProperty}`);
128
+ process.exit(ok ? 0 : 1);