@sleep2agi/agent-network-dashboard 0.5.1-preview.0 → 0.5.1-preview.10

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 (151) 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 +6 -6
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +1 -1
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/admin.html +1 -1
  21. package/.next/server/app/admin.rsc +1 -1
  22. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  23. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  28. package/.next/server/app/index.html +2 -2
  29. package/.next/server/app/index.rsc +2 -2
  30. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/login.html +2 -2
  37. package/.next/server/app/login.rsc +2 -2
  38. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  39. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  40. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  44. package/.next/server/app/logs.html +1 -1
  45. package/.next/server/app/logs.rsc +1 -1
  46. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  52. package/.next/server/app/messages.html +1 -1
  53. package/.next/server/app/messages.rsc +1 -1
  54. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  60. package/.next/server/app/node.html +1 -1
  61. package/.next/server/app/node.rsc +1 -1
  62. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  63. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  68. package/.next/server/app/nodes.html +1 -1
  69. package/.next/server/app/nodes.rsc +1 -1
  70. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  76. package/.next/server/app/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/server-logs.html +1 -1
  78. package/.next/server/app/server-logs.rsc +1 -1
  79. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  85. package/.next/server/app/settings/networks.html +1 -1
  86. package/.next/server/app/settings/networks.rsc +1 -1
  87. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  94. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/settings/tokens.html +1 -1
  96. package/.next/server/app/settings/tokens.rsc +1 -1
  97. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  104. package/.next/server/app/settings.html +2 -2
  105. package/.next/server/app/settings.rsc +2 -2
  106. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  111. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  112. package/.next/server/app/tasks.html +1 -1
  113. package/.next/server/app/tasks.rsc +1 -1
  114. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  120. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  121. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  126. package/.next/server/middleware-build-manifest.js +3 -3
  127. package/.next/server/pages/404.html +1 -1
  128. package/.next/server/pages/500.html +1 -1
  129. package/.next/static/chunks/0jwtl1a1lwyp5.js +1 -0
  130. package/.next/static/chunks/0lpe~8qw.tb2-.js +4 -0
  131. package/.next/static/chunks/0sl9zcww9om1e.js +1 -0
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +155 -17
  135. package/package.json +1 -1
  136. package/scripts/topo-active-links-freshness-color-test.mjs +86 -0
  137. package/scripts/topo-filter-pill-weight-test.mjs +75 -0
  138. package/scripts/topo-minimap-viewport-hover-test.mjs +109 -0
  139. package/scripts/topo-more-flows-hover-letterspacing-test.mjs +98 -0
  140. package/scripts/topo-more-flows-unit-test.mjs +95 -0
  141. package/scripts/topo-panel-count-letterspacing-test.mjs +89 -0
  142. package/scripts/topo-panel-rect-opacity-hover-test.mjs +109 -0
  143. package/scripts/topo-panel-title-hover-letterspacing-test.mjs +97 -0
  144. package/scripts/topo-pin-intersection-unit-test.mjs +100 -0
  145. package/scripts/topo-zoom-level-hover-letterspacing-test.mjs +91 -0
  146. package/.next/static/chunks/03v-0n3d~t1sm.js +0 -4
  147. package/.next/static/chunks/0vt5wron8jig5.js +0 -1
  148. package/.next/static/chunks/180biiw78-hb_.js +0 -1
  149. /package/.next/static/{ypixDJRds4g4TLoUdmrwN → O8CVuAcu03lV_emn4fTFW}/_buildManifest.js +0 -0
  150. /package/.next/static/{ypixDJRds4g4TLoUdmrwN → O8CVuAcu03lV_emn4fTFW}/_clientMiddlewareManifest.js +0 -0
  151. /package/.next/static/{ypixDJRds4g4TLoUdmrwN → O8CVuAcu03lV_emn4fTFW}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":252,"timestamp":129277071175,"id":4,"parentId":1,"tags":{},"startTime":1778937249317,"traceId":"49e8fa4d0a5e4d2a"},{"name":"load-custom-routes","duration":489,"timestamp":129277071565,"id":5,"parentId":1,"tags":{},"startTime":1778937249318,"traceId":"49e8fa4d0a5e4d2a"},{"name":"create-dist-dir","duration":665,"timestamp":129277072097,"id":6,"parentId":1,"tags":{},"startTime":1778937249318,"traceId":"49e8fa4d0a5e4d2a"},{"name":"clean","duration":36861,"timestamp":129277073464,"id":7,"parentId":1,"tags":{},"startTime":1778937249320,"traceId":"49e8fa4d0a5e4d2a"},{"name":"discover-routes","duration":24871,"timestamp":129277193814,"id":8,"parentId":1,"tags":{},"startTime":1778937249440,"traceId":"49e8fa4d0a5e4d2a"},{"name":"create-root-mapping","duration":168,"timestamp":129277218762,"id":9,"parentId":1,"tags":{},"startTime":1778937249465,"traceId":"49e8fa4d0a5e4d2a"},{"name":"generate-route-types","duration":24112,"timestamp":129277221997,"id":10,"parentId":1,"tags":{},"startTime":1778937249468,"traceId":"49e8fa4d0a5e4d2a"},{"name":"public-dir-conflict-check","duration":133,"timestamp":129277246204,"id":11,"parentId":1,"tags":{},"startTime":1778937249492,"traceId":"49e8fa4d0a5e4d2a"},{"name":"generate-routes-manifest","duration":4599,"timestamp":129277246462,"id":12,"parentId":1,"tags":{},"startTime":1778937249493,"traceId":"49e8fa4d0a5e4d2a"},{"name":"run-turbopack","duration":5887974,"timestamp":129277256291,"id":14,"parentId":1,"tags":{},"startTime":1778937249503,"traceId":"49e8fa4d0a5e4d2a"},{"name":"turbopack-build-events","duration":78,"timestamp":129277577411,"id":15,"parentId":1,"tags":{},"startTime":1778937249824,"traceId":"49e8fa4d0a5e4d2a"},{"name":"run-typescript","duration":9694194,"timestamp":129283153413,"id":16,"parentId":1,"tags":{},"startTime":1778937255400,"traceId":"49e8fa4d0a5e4d2a"},{"name":"generate-required-server-files","duration":3021,"timestamp":129292848681,"id":18,"parentId":1,"tags":{},"startTime":1778937265095,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-static-error-page","duration":13401,"timestamp":129293020831,"id":20,"parentId":19,"tags":{},"startTime":1778937265267,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":506732,"timestamp":129293037371,"id":65,"parentId":22,"tags":{},"startTime":1778937265284,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":520823,"timestamp":129293023448,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778937265270,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":557585,"timestamp":129293038727,"id":67,"parentId":26,"tags":{},"startTime":1778937265285,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":570339,"timestamp":129293026079,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778937265272,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":589702,"timestamp":129293038955,"id":69,"parentId":28,"tags":{},"startTime":1778937265285,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":602446,"timestamp":129293026299,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778937265273,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":593694,"timestamp":129293039496,"id":72,"parentId":32,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":606261,"timestamp":129293026998,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778937265273,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":596990,"timestamp":129293039665,"id":73,"parentId":33,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":609546,"timestamp":129293027167,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778937265273,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":607083,"timestamp":129293039751,"id":74,"parentId":34,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":619597,"timestamp":129293027308,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778937265274,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":613425,"timestamp":129293039809,"id":76,"parentId":36,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":625386,"timestamp":129293027910,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778937265274,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":629195,"timestamp":129293039836,"id":77,"parentId":37,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":641002,"timestamp":129293028098,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778937265274,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":636040,"timestamp":129293039869,"id":78,"parentId":38,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":647746,"timestamp":129293028224,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778937265274,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":636502,"timestamp":129293039789,"id":75,"parentId":35,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":648881,"timestamp":129293027455,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778937265274,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":638159,"timestamp":129293039882,"id":79,"parentId":39,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":649723,"timestamp":129293028364,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778937265275,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":648779,"timestamp":129293039425,"id":71,"parentId":30,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":661678,"timestamp":129293026574,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778937265273,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":648553,"timestamp":129293039902,"id":81,"parentId":42,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":659602,"timestamp":129293028912,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778937265275,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":648794,"timestamp":129293039890,"id":80,"parentId":40,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":660222,"timestamp":129293028504,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778937265275,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":655544,"timestamp":129293039934,"id":84,"parentId":46,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":665812,"timestamp":129293029710,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778937265276,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":656672,"timestamp":129293039925,"id":83,"parentId":45,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":667049,"timestamp":129293029586,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778937265276,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":661820,"timestamp":129293039262,"id":70,"parentId":29,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":674719,"timestamp":129293026426,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778937265273,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":661386,"timestamp":129293039958,"id":86,"parentId":48,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":671417,"timestamp":129293029973,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778937265276,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":662012,"timestamp":129293039946,"id":85,"parentId":47,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":672170,"timestamp":129293029829,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778937265276,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":664462,"timestamp":129293039969,"id":87,"parentId":49,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":674347,"timestamp":129293030128,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778937265276,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":665960,"timestamp":129293039914,"id":82,"parentId":44,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":676482,"timestamp":129293029438,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778937265276,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":667451,"timestamp":129293038834,"id":68,"parentId":27,"tags":{},"startTime":1778937265285,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":680149,"timestamp":129293026181,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778937265272,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":669676,"timestamp":129293036960,"id":64,"parentId":21,"tags":{},"startTime":1778937265283,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":684381,"timestamp":129293022296,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778937265269,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":666880,"timestamp":129293039981,"id":88,"parentId":50,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":675445,"timestamp":129293031452,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778937265278,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":669828,"timestamp":129293049469,"id":92,"parentId":41,"tags":{},"startTime":1778937265296,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":690746,"timestamp":129293028618,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778937265275,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":679552,"timestamp":129293039993,"id":89,"parentId":51,"tags":{},"startTime":1778937265286,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":688025,"timestamp":129293031557,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778937265278,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":692666,"timestamp":129293038577,"id":66,"parentId":25,"tags":{},"startTime":1778937265285,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":705392,"timestamp":129293025914,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778937265272,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":701637,"timestamp":129293047499,"id":90,"parentId":24,"tags":{},"startTime":1778937265294,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":725354,"timestamp":129293023858,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778937265270,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":705734,"timestamp":129293048608,"id":91,"parentId":31,"tags":{},"startTime":1778937265295,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":727704,"timestamp":129293026706,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778937265273,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":741501,"timestamp":129293057068,"id":94,"parentId":23,"tags":{},"startTime":1778937265303,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":774978,"timestamp":129293023662,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778937265270,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":746667,"timestamp":129293057107,"id":96,"parentId":53,"tags":{},"startTime":1778937265303,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":771874,"timestamp":129293031989,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778937265278,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":752844,"timestamp":129293055085,"id":93,"parentId":43,"tags":{},"startTime":1778937265301,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":778889,"timestamp":129293029097,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778937265275,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":754498,"timestamp":129293057160,"id":100,"parentId":58,"tags":{},"startTime":1778937265303,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":778681,"timestamp":129293033041,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778937265279,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":754637,"timestamp":129293057259,"id":101,"parentId":59,"tags":{},"startTime":1778937265304,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":778665,"timestamp":129293033267,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778937265280,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":756058,"timestamp":129293057128,"id":98,"parentId":55,"tags":{},"startTime":1778937265303,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":780966,"timestamp":129293032278,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778937265279,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":760557,"timestamp":129293057272,"id":102,"parentId":61,"tags":{},"startTime":1778937265304,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":784090,"timestamp":129293033796,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778937265280,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":748363,"timestamp":129293072570,"id":105,"parentId":60,"tags":{},"startTime":1778937265319,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":787522,"timestamp":129293033453,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778937265280,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":764236,"timestamp":129293057284,"id":103,"parentId":62,"tags":{},"startTime":1778937265304,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":787637,"timestamp":129293033923,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778937265280,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":765760,"timestamp":129293057295,"id":104,"parentId":63,"tags":{},"startTime":1778937265304,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":789055,"timestamp":129293034043,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778937265280,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":734620,"timestamp":129293090779,"id":106,"parentId":57,"tags":{},"startTime":1778937265337,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":792856,"timestamp":129293032584,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778937265279,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":769591,"timestamp":129293057148,"id":99,"parentId":56,"tags":{},"startTime":1778937265303,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":794360,"timestamp":129293032418,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778937265279,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":778519,"timestamp":129293057094,"id":95,"parentId":52,"tags":{},"startTime":1778937265303,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":803783,"timestamp":129293031878,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778937265278,"traceId":"49e8fa4d0a5e4d2a"},{"name":"is-page-static","duration":796925,"timestamp":129293057120,"id":97,"parentId":54,"tags":{},"startTime":1778937265303,"traceId":"49e8fa4d0a5e4d2a"},{"name":"check-page","duration":821969,"timestamp":129293032133,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778937265278,"traceId":"49e8fa4d0a5e4d2a"},{"name":"static-check","duration":834181,"timestamp":129293019974,"id":19,"parentId":1,"tags":{},"startTime":1778937265266,"traceId":"49e8fa4d0a5e4d2a"}]
2
- [{"name":"write-routes-manifest","duration":735,"timestamp":129293862883,"id":108,"parentId":1,"tags":{},"startTime":1778937266109,"traceId":"49e8fa4d0a5e4d2a"},{"name":"load-dotenv","duration":42,"timestamp":129293875176,"id":111,"parentId":110,"tags":{},"startTime":1778937266121,"traceId":"49e8fa4d0a5e4d2a"},{"name":"run-export-path-map","duration":698,"timestamp":129293878156,"id":112,"parentId":110,"tags":{},"startTime":1778937266124,"traceId":"49e8fa4d0a5e4d2a"},{"name":"next-export","duration":630799,"timestamp":129293873978,"id":110,"parentId":1,"tags":{},"startTime":1778937266120,"traceId":"49e8fa4d0a5e4d2a"},{"name":"move-exported-app-not-found-","duration":1380,"timestamp":129294508611,"id":113,"parentId":109,"tags":{},"startTime":1778937266755,"traceId":"49e8fa4d0a5e4d2a"},{"name":"move-exported-app-global-error-","duration":617,"timestamp":129294510138,"id":114,"parentId":109,"tags":{},"startTime":1778937266756,"traceId":"49e8fa4d0a5e4d2a"},{"name":"static-generation","duration":645481,"timestamp":129293867589,"id":109,"parentId":1,"tags":{},"startTime":1778937266114,"traceId":"49e8fa4d0a5e4d2a"},{"name":"write-routes-manifest","duration":417,"timestamp":129294513324,"id":115,"parentId":1,"tags":{},"startTime":1778937266760,"traceId":"49e8fa4d0a5e4d2a"},{"name":"print-tree-view","duration":3692,"timestamp":129294529228,"id":116,"parentId":1,"tags":{},"startTime":1778937266776,"traceId":"49e8fa4d0a5e4d2a"},{"name":"write-route-bundle-stats","duration":13217,"timestamp":129294532950,"id":117,"parentId":1,"tags":{},"startTime":1778937266779,"traceId":"49e8fa4d0a5e4d2a"},{"name":"telemetry-flush","duration":24037,"timestamp":129294546195,"id":118,"parentId":1,"tags":{},"startTime":1778937266792,"traceId":"49e8fa4d0a5e4d2a"},{"name":"next-build","duration":17554675,"timestamp":129277015594,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778937249262,"traceId":"49e8fa4d0a5e4d2a"}]
1
+ [{"name":"generate-buildid","duration":245,"timestamp":132804720352,"id":4,"parentId":1,"tags":{},"startTime":1778940776967,"traceId":"70171d193e8b9bcb"},{"name":"load-custom-routes","duration":471,"timestamp":132804720750,"id":5,"parentId":1,"tags":{},"startTime":1778940776967,"traceId":"70171d193e8b9bcb"},{"name":"create-dist-dir","duration":654,"timestamp":132804721264,"id":6,"parentId":1,"tags":{},"startTime":1778940776968,"traceId":"70171d193e8b9bcb"},{"name":"clean","duration":31816,"timestamp":132804722590,"id":7,"parentId":1,"tags":{},"startTime":1778940776969,"traceId":"70171d193e8b9bcb"},{"name":"discover-routes","duration":10352,"timestamp":132804836122,"id":8,"parentId":1,"tags":{},"startTime":1778940777082,"traceId":"70171d193e8b9bcb"},{"name":"create-root-mapping","duration":169,"timestamp":132804846547,"id":9,"parentId":1,"tags":{},"startTime":1778940777093,"traceId":"70171d193e8b9bcb"},{"name":"generate-route-types","duration":20589,"timestamp":132804850281,"id":10,"parentId":1,"tags":{},"startTime":1778940777097,"traceId":"70171d193e8b9bcb"},{"name":"public-dir-conflict-check","duration":113,"timestamp":132804870952,"id":11,"parentId":1,"tags":{},"startTime":1778940777117,"traceId":"70171d193e8b9bcb"},{"name":"generate-routes-manifest","duration":4973,"timestamp":132804871175,"id":12,"parentId":1,"tags":{},"startTime":1778940777117,"traceId":"70171d193e8b9bcb"},{"name":"run-turbopack","duration":6177386,"timestamp":132804894789,"id":14,"parentId":1,"tags":{},"startTime":1778940777141,"traceId":"70171d193e8b9bcb"},{"name":"turbopack-build-events","duration":126,"timestamp":132805191940,"id":15,"parentId":1,"tags":{},"startTime":1778940777438,"traceId":"70171d193e8b9bcb"},{"name":"run-typescript","duration":9585686,"timestamp":132811081059,"id":16,"parentId":1,"tags":{},"startTime":1778940783327,"traceId":"70171d193e8b9bcb"},{"name":"generate-required-server-files","duration":2220,"timestamp":132820668042,"id":18,"parentId":1,"tags":{},"startTime":1778940792914,"traceId":"70171d193e8b9bcb"},{"name":"check-static-error-page","duration":12031,"timestamp":132820826819,"id":20,"parentId":19,"tags":{},"startTime":1778940793073,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":436129,"timestamp":132820841164,"id":65,"parentId":22,"tags":{},"startTime":1778940793087,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":448173,"timestamp":132820829287,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778940793076,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":552310,"timestamp":132820844446,"id":71,"parentId":30,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":564562,"timestamp":132820832314,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":557584,"timestamp":132820844501,"id":72,"parentId":32,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":569551,"timestamp":132820832603,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":604650,"timestamp":132820843708,"id":67,"parentId":26,"tags":{},"startTime":1778940793090,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":616508,"timestamp":132820831929,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":606611,"timestamp":132820844646,"id":73,"parentId":33,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":618621,"timestamp":132820832700,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":609275,"timestamp":132820843876,"id":68,"parentId":27,"tags":{},"startTime":1778940793090,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":621309,"timestamp":132820832027,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":609606,"timestamp":132820844711,"id":74,"parentId":34,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":621583,"timestamp":132820832795,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":616672,"timestamp":132820844763,"id":76,"parentId":36,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":628446,"timestamp":132820833233,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":621301,"timestamp":132820844746,"id":75,"parentId":35,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":633220,"timestamp":132820832891,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":645127,"timestamp":132820843997,"id":69,"parentId":28,"tags":{},"startTime":1778940793090,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":658223,"timestamp":132820832123,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":645824,"timestamp":132820844787,"id":77,"parentId":37,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":657285,"timestamp":132820833364,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":646021,"timestamp":132820844809,"id":79,"parentId":39,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":657327,"timestamp":132820833538,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":663530,"timestamp":132820842803,"id":66,"parentId":25,"tags":{},"startTime":1778940793089,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":674624,"timestamp":132820831779,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":678374,"timestamp":132820844832,"id":81,"parentId":42,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":689418,"timestamp":132820833886,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":682483,"timestamp":132820844287,"id":70,"parentId":29,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":694633,"timestamp":132820832206,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":682418,"timestamp":132820844851,"id":83,"parentId":45,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":693009,"timestamp":132820834302,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":688633,"timestamp":132820844820,"id":80,"parentId":40,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":699911,"timestamp":132820833609,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":696463,"timestamp":132820840748,"id":64,"parentId":21,"tags":{},"startTime":1778940793087,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":709128,"timestamp":132820828130,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778940793074,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":692516,"timestamp":132820844883,"id":86,"parentId":48,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":702908,"timestamp":132820834521,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":692927,"timestamp":132820844840,"id":82,"parentId":44,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":703599,"timestamp":132820834213,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":715188,"timestamp":132820844797,"id":78,"parentId":38,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":726606,"timestamp":132820833457,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":715390,"timestamp":132820844914,"id":89,"parentId":51,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":724300,"timestamp":132820836043,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778940793082,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":715829,"timestamp":132820844865,"id":84,"parentId":46,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":726376,"timestamp":132820834370,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":716014,"timestamp":132820844895,"id":87,"parentId":49,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":726325,"timestamp":132820834616,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":710003,"timestamp":132820851112,"id":90,"parentId":24,"tags":{},"startTime":1778940793097,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":731453,"timestamp":132820829694,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778940793076,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":719148,"timestamp":132820844872,"id":85,"parentId":47,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":729622,"timestamp":132820834447,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":711328,"timestamp":132820855249,"id":93,"parentId":43,"tags":{},"startTime":1778940793102,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":732641,"timestamp":132820833983,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":718462,"timestamp":132820852335,"id":91,"parentId":31,"tags":{},"startTime":1778940793099,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":738450,"timestamp":132820832396,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":729519,"timestamp":132820853205,"id":92,"parentId":41,"tags":{},"startTime":1778940793099,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":749119,"timestamp":132820833672,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":766178,"timestamp":132820844906,"id":88,"parentId":50,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":775255,"timestamp":132820835900,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778940793082,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":761771,"timestamp":132820857596,"id":100,"parentId":58,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":781647,"timestamp":132820837779,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":766861,"timestamp":132820857569,"id":98,"parentId":55,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":787453,"timestamp":132820837038,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":769261,"timestamp":132820857712,"id":101,"parentId":59,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":789135,"timestamp":132820837932,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":770196,"timestamp":132820857500,"id":94,"parentId":23,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":798241,"timestamp":132820829510,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778940793076,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":772731,"timestamp":132820857530,"id":95,"parentId":52,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":793881,"timestamp":132820836425,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":772909,"timestamp":132820857546,"id":96,"parentId":53,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":793878,"timestamp":132820836609,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":772917,"timestamp":132820857747,"id":102,"parentId":61,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":792325,"timestamp":132820838377,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778940793085,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":778196,"timestamp":132820857773,"id":104,"parentId":63,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":797432,"timestamp":132820838596,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778940793085,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":757246,"timestamp":132820880077,"id":106,"parentId":57,"tags":{},"startTime":1778940793126,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":799982,"timestamp":132820837379,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":770234,"timestamp":132820868273,"id":105,"parentId":60,"tags":{},"startTime":1778940793115,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":800462,"timestamp":132820838078,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":781722,"timestamp":132820857763,"id":103,"parentId":62,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":801019,"timestamp":132820838486,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778940793085,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":795257,"timestamp":132820857556,"id":97,"parentId":54,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":816053,"timestamp":132820836792,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":799792,"timestamp":132820857582,"id":99,"parentId":56,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":820201,"timestamp":132820837205,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"static-check","duration":831878,"timestamp":132820825662,"id":19,"parentId":1,"tags":{},"startTime":1778940793072,"traceId":"70171d193e8b9bcb"}]
2
+ [{"name":"write-routes-manifest","duration":536,"timestamp":132821665879,"id":108,"parentId":1,"tags":{},"startTime":1778940793912,"traceId":"70171d193e8b9bcb"},{"name":"load-dotenv","duration":44,"timestamp":132821679079,"id":111,"parentId":110,"tags":{},"startTime":1778940793925,"traceId":"70171d193e8b9bcb"},{"name":"run-export-path-map","duration":570,"timestamp":132821681805,"id":112,"parentId":110,"tags":{},"startTime":1778940793928,"traceId":"70171d193e8b9bcb"},{"name":"next-export","duration":571462,"timestamp":132821677898,"id":110,"parentId":1,"tags":{},"startTime":1778940793924,"traceId":"70171d193e8b9bcb"},{"name":"move-exported-app-not-found-","duration":560,"timestamp":132822253592,"id":113,"parentId":109,"tags":{},"startTime":1778940794500,"traceId":"70171d193e8b9bcb"},{"name":"move-exported-app-global-error-","duration":394,"timestamp":132822254246,"id":114,"parentId":109,"tags":{},"startTime":1778940794501,"traceId":"70171d193e8b9bcb"},{"name":"static-generation","duration":585693,"timestamp":132821671111,"id":109,"parentId":1,"tags":{},"startTime":1778940793917,"traceId":"70171d193e8b9bcb"},{"name":"write-routes-manifest","duration":376,"timestamp":132822257058,"id":115,"parentId":1,"tags":{},"startTime":1778940794503,"traceId":"70171d193e8b9bcb"},{"name":"print-tree-view","duration":3994,"timestamp":132822277787,"id":116,"parentId":1,"tags":{},"startTime":1778940794524,"traceId":"70171d193e8b9bcb"},{"name":"write-route-bundle-stats","duration":14733,"timestamp":132822281819,"id":117,"parentId":1,"tags":{},"startTime":1778940794528,"traceId":"70171d193e8b9bcb"},{"name":"telemetry-flush","duration":13499,"timestamp":132822296586,"id":118,"parentId":1,"tags":{},"startTime":1778940794543,"traceId":"70171d193e8b9bcb"},{"name":"next-build","duration":17641557,"timestamp":132804668556,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940776915,"traceId":"70171d193e8b9bcb"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5887974,"timestamp":129277256291,"id":14,"parentId":1,"tags":{},"startTime":1778937249503,"traceId":"49e8fa4d0a5e4d2a"},{"name":"turbopack-build-events","duration":78,"timestamp":129277577411,"id":15,"parentId":1,"tags":{},"startTime":1778937249824,"traceId":"49e8fa4d0a5e4d2a"},{"name":"run-typescript","duration":9694194,"timestamp":129283153413,"id":16,"parentId":1,"tags":{},"startTime":1778937255400,"traceId":"49e8fa4d0a5e4d2a"},{"name":"static-check","duration":834181,"timestamp":129293019974,"id":19,"parentId":1,"tags":{},"startTime":1778937265266,"traceId":"49e8fa4d0a5e4d2a"},{"name":"static-generation","duration":645481,"timestamp":129293867589,"id":109,"parentId":1,"tags":{},"startTime":1778937266114,"traceId":"49e8fa4d0a5e4d2a"},{"name":"telemetry-flush","duration":24037,"timestamp":129294546195,"id":118,"parentId":1,"tags":{},"startTime":1778937266792,"traceId":"49e8fa4d0a5e4d2a"},{"name":"next-build","duration":17554675,"timestamp":129277015594,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778937249262,"traceId":"49e8fa4d0a5e4d2a"}]
1
+ [{"name":"run-turbopack","duration":6177386,"timestamp":132804894789,"id":14,"parentId":1,"tags":{},"startTime":1778940777141,"traceId":"70171d193e8b9bcb"},{"name":"turbopack-build-events","duration":126,"timestamp":132805191940,"id":15,"parentId":1,"tags":{},"startTime":1778940777438,"traceId":"70171d193e8b9bcb"},{"name":"run-typescript","duration":9585686,"timestamp":132811081059,"id":16,"parentId":1,"tags":{},"startTime":1778940783327,"traceId":"70171d193e8b9bcb"},{"name":"static-check","duration":831878,"timestamp":132820825662,"id":19,"parentId":1,"tags":{},"startTime":1778940793072,"traceId":"70171d193e8b9bcb"},{"name":"static-generation","duration":585693,"timestamp":132821671111,"id":109,"parentId":1,"tags":{},"startTime":1778940793917,"traceId":"70171d193e8b9bcb"},{"name":"telemetry-flush","duration":13499,"timestamp":132822296586,"id":118,"parentId":1,"tags":{},"startTime":1778940794543,"traceId":"70171d193e8b9bcb"},{"name":"next-build","duration":17641557,"timestamp":132804668556,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940776915,"traceId":"70171d193e8b9bcb"}]
@@ -1026,6 +1026,30 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1026
1026
  // navigation footer. Drives the on-hover opacity boost + underline
1027
1027
  // that signals interactivity, mirroring the hoveredHub idiom above.
1028
1028
  const [hoveredRecentMore, setHoveredRecentMore] = useState(false);
1029
+ // Round 346 / Loop: minimap-container hover affordance. The minimap
1030
+ // is a click-target (role=button at line ~7810, recenter-on-click +
1031
+ // Enter→resetView) but pre-R346 nothing visually changed on hover —
1032
+ // the only hint was the `cursor: crosshair` style. R346 lifts the
1033
+ // viewport rect (strokeWidth 1.5 → 1.75 + opacity 0.9 → 1.0) when
1034
+ // the user enters the minimap, marking "this is the recenter target
1035
+ // and it's alive". Sibling polish to the R332 minimap rounded-md →
1036
+ // rounded-lg corner family — that round refined geometry, this one
1037
+ // gives the viewport indicator inside the geometry a hover state.
1038
+ // 280ms ease-out transition list matches R199 smoothView vocabulary
1039
+ // so the visual joins the existing rhythm on the same rect.
1040
+ const [hoveredMinimap, setHoveredMinimap] = useState(false);
1041
+ // Round 347 / Loop: zoom-level readout hover-state letter-spacing
1042
+ // tween (0 → 0.5 px). The readout sandwiched between zoom-out /
1043
+ // zoom-in is a passive percent display — pre-R347 it had no hover
1044
+ // feedback at all (only a `title` tooltip). R347 extends the R344
1045
+ // (`+N more flows` footer) + R345 (panel titles) hover-letter-
1046
+ // spacing family from panel/footer surfaces into the HTML chrome
1047
+ // strip. Hovering the readout spreads its digits 0.5 px, signalling
1048
+ // "this is alive". tabular-nums + minWidth: 46 from R225 still lock
1049
+ // the column so the tween doesn't shove neighbouring controls.
1050
+ // 200ms ease-out joins the existing R264 color/border transition
1051
+ // list on the same span.
1052
+ const [hoveredZoomLevel, setHoveredZoomLevel] = useState(false);
1029
1053
  // R135: panel-wide hover-elevation. The recent-signal + legend
1030
1054
  // panels both already host clickable rows (R56/R116 recent rows,
1031
1055
  // R55/R61 legend rows) and a clickable footer (R133), so the
@@ -2259,7 +2283,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2259
2283
  data-active-filter="status"
2260
2284
  data-filter-match-count={matchCount}
2261
2285
  data-filter-match-aliases={matchAliases.join(',')}
2262
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono text-xs border anet-fade-in anet-topo-chip-focus"
2286
+ 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"
2263
2287
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear filter'}
2264
2288
  onClick={() => setPinnedStatus(null)}
2265
2289
  style={{
@@ -2297,7 +2321,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2297
2321
  data-active-filter="group"
2298
2322
  data-filter-match-count={matchCount}
2299
2323
  data-filter-match-aliases={matchAliases.join(',')}
2300
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono text-xs border anet-fade-in anet-topo-chip-focus"
2324
+ 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"
2301
2325
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear filter'}
2302
2326
  onClick={() => setPinnedGroup(null)}
2303
2327
  style={{
@@ -2347,7 +2371,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2347
2371
  data-active-filter="vendor"
2348
2372
  data-filter-match-count={matchCount}
2349
2373
  data-filter-match-aliases={matchAliases.join(',')}
2350
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono text-xs border anet-fade-in anet-topo-chip-focus"
2374
+ 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"
2351
2375
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear vendor filter'}
2352
2376
  onClick={() => setPinnedVendor(null)}
2353
2377
  style={{
@@ -2395,7 +2419,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2395
2419
  data-filter-match-count={link.count}
2396
2420
  data-filter-match-aliases={`${link.from},${link.to}`}
2397
2421
  data-active-filter-edge-hot={isHot ? 'true' : 'false'}
2398
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono text-xs border anet-fade-in anet-topo-chip-focus"
2422
+ 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"
2399
2423
  title={`${link.from} → ${link.to} (${link.count} msg${link.count === 1 ? '' : 's'}${isHot ? ', hot lane · ≥ 10' : ''}) — click to clear`}
2400
2424
  onClick={() => setPinnedEdgeKey(null)}
2401
2425
  style={{
@@ -2586,7 +2610,22 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2586
2610
  R150 pin-pill family parity now complete with
2587
2611
  this composed-pin sibling). data-pin-intersection-
2588
2612
  count-* attrs expose both spans for tests. */}
2589
- <span className="tabular-nums" data-pin-intersection-count-dims>{pinDimCount}</span> pins<span className="opacity-70 tabular-nums" data-pin-intersection-count-matches> · {matchAliases.length}</span>
2613
+ {/* Round 341 / Loop: middle " pins" unit word
2614
+ previously sat as a bare text node between the
2615
+ two count spans, while the matches-count span
2616
+ already carried opacity-0.7 (R335 + R324 era).
2617
+ The pinDimCount span is prominent and the
2618
+ matches count is recessive — but the literal
2619
+ " pins" was at FULL opacity, breaking the
2620
+ chip-internal hierarchy unified across R333/
2621
+ R335/R336/R337/R338/R340. R341 wraps " pins"
2622
+ in an opacity-0.7 span so the chip reads:
2623
+ pinDimCount (prominent value)
2624
+ " pins" (recessive unit)
2625
+ " · {N}" (recessive count)
2626
+ Three-tier hierarchy on a single chip; 7th
2627
+ surface in the chip-internal-hierarchy arc. */}
2628
+ <span className="tabular-nums" data-pin-intersection-count-dims>{pinDimCount}</span><span className="opacity-70" data-pin-intersection-unit> pins</span><span className="opacity-70 tabular-nums" data-pin-intersection-count-matches> · {matchAliases.length}</span>
2590
2629
  {/* Round 237 / Loop: ⚠ warning glyph picks up the
2591
2630
  always-mount-opacity-gate idiom. Pre-R237 the
2592
2631
  glyph was conditionally rendered on isEmpty,
@@ -2900,8 +2939,19 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2900
2939
  const dotColor = isLight
2901
2940
  ? `rgba(13, 148, 136, ${alpha.toFixed(2)})`
2902
2941
  : `rgba(34, 211, 238, ${alpha.toFixed(2)})`;
2942
+ // Round 342 / Loop: active-links chip freshness suffix
2943
+ // wrapper text-gray-500 → text-gray-400 (R317
2944
+ // subordinate-text-lift family applied to chrome
2945
+ // inactive Layout toggle + R333 vendor count suffix).
2946
+ // The "last 5s ago" suffix is chip-subordinate
2947
+ // metadata; gray-500 sat near-invisible against the
2948
+ // chip's outer color, gray-400 lifts it into the band
2949
+ // where the eye reads it as deliberate freshness
2950
+ // annotation. The freshness DOT keeps its own inline
2951
+ // color: dotColor — the lift only affects the trailing
2952
+ // literal "last {rel}" text.
2903
2953
  return (
2904
- <span className="text-gray-500">
2954
+ <span className="text-gray-400">
2905
2955
  <span
2906
2956
  data-active-links-freshness-dot
2907
2957
  data-active-links-freshness-alpha={alpha.toFixed(2)}
@@ -6198,7 +6248,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6198
6248
  x="0" y="0" width="230" height="88" rx="10"
6199
6249
  fill={pal.legendBox.fill}
6200
6250
  stroke={pal.legendBox.stroke}
6201
- opacity={isLight ? 0.97 : 0.92}
6251
+ // Round 348 / Loop: recent-signal panel rect opacity hover-
6252
+ // state bump — joins the panel-hover cue stack (R135 drop-
6253
+ // shadow boost + R345 title letter-spacing tween 0.3 → 0.4
6254
+ // + R266 fill theme-flip). Cyber 0.92 → 0.97, light 0.97 →
6255
+ // 1.0 on hoveredPanel === 'recent'. The panel "solidifies"
6256
+ // on hover — pure paint-level change, geometry-safe (bbox
6257
+ // unchanged so topo-overlap-test invariants hold). The
6258
+ // R247 transition list already includes `opacity 200ms
6259
+ // ease-out` so the value tween is automatic. Sibling
6260
+ // change at legend panel rect below (~line 7222).
6261
+ opacity={hoveredPanel === 'recent' ? (isLight ? 1 : 0.97) : (isLight ? 0.97 : 0.92)}
6202
6262
  style={{
6203
6263
  /* R135: drop-shadow intensifies on panel hover. Base
6204
6264
  shadow (2px / 6px blur) signals card elevation
@@ -6250,7 +6310,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6250
6310
  title (line ~6556) — both panels share the same
6251
6311
  editorial-text-spacing convention. data-recent-panel-
6252
6312
  title handle unchanged so R266 test still resolves. */}
6253
- <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing="0.3" style={{ transition: 'fill 200ms ease-out' }} data-recent-panel-title>recent signal</text>
6313
+ {/* Round 345 / Loop: recent-signal panel title gains
6314
+ letter-spacing tween 0.3 → 0.4 on panel hover.
6315
+ hoveredPanel === 'recent' is set by the panel <g>
6316
+ wrapper's onMouseEnter (line ~6263 area). Sibling to
6317
+ R344 hover-letter-spacing applied to the +N more
6318
+ flows footer — same gesture vocabulary at a panel-
6319
+ title scope: hovering the panel chrome spreads the
6320
+ title 0.1 px, signalling "this is a coherent unit
6321
+ you're entering". transition list extends letter-
6322
+ spacing 200ms ease-out alongside existing fill 200ms. */}
6323
+ <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing={hoveredPanel === 'recent' ? '0.4' : '0.3'} style={{ transition: 'fill 200ms ease-out, letter-spacing 200ms ease-out' }} data-recent-panel-title>recent signal</text>
6254
6324
  {/* R96: header count now matches what the rows show. Pre-R96
6255
6325
  this read "X msgs" off the raw messages array, but the
6256
6326
  rows below render DEDUPED flowLinks — so a fleet with 10
@@ -6325,6 +6395,21 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6325
6395
  textAnchor="end"
6326
6396
  fontSize="10"
6327
6397
  fontFamily="monospace"
6398
+ // Round 349 / Loop: editorial letter-spacing 0.2 on the
6399
+ // recent-signal panel header count. Sits one tier below
6400
+ // the R301 panel title letterSpacing="0.3" so the panel
6401
+ // header reads as a 2-step hierarchy (title 0.3 / count
6402
+ // 0.2). Sibling change on the legend panel count below
6403
+ // closes the panel-pair editorial symmetry. Joins the
6404
+ // R285 / R289 / R301 / R302 / R304 / R325 editorial-
6405
+ // letterspacing tier at the panel-summary scope. The
6406
+ // R162 freshness fill, R225 tabular-nums, R311 fw=600,
6407
+ // R336 unit-tspan opacity-0.7 split all preserved —
6408
+ // the tier propagates to all descendant tspans via
6409
+ // SVG inheritance. data-recent-panel-count-letter-
6410
+ // spacing exposes the value for tests.
6411
+ letterSpacing="0.2"
6412
+ data-recent-panel-count-letter-spacing="0.2"
6328
6413
  >
6329
6414
  {/* Round 225 / Loop: tabular-nums on the panel-header
6330
6415
  flow-count tspan. The "{N} flows" string lives in
@@ -7074,6 +7159,28 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7074
7159
  R302 empty main: 0.2px (empty-state hint)
7075
7160
  R325 footer link: 0.2px (panel nav action) ← NEW
7076
7161
  R304 empty sub: 0.15px (instructional sub) */}
7162
+ {/* Round 340 / Loop: +N more flows footer link extends
7163
+ the R333/R335/R336/R337/R338 chip-internal-hierarchy
7164
+ arc to a 6th surface. The digit `{moreCount}` reads
7165
+ as the primary data ("how many more flows"); the
7166
+ unit text ` more flow(s)` recedes via a nested
7167
+ tspan with opacity-0.7 (multiplicative against the
7168
+ parent <text>'s hover/rest opacity, so unit always
7169
+ sits below the digit). The `label` variable is
7170
+ preserved for the <title> tooltip — only the SVG
7171
+ render splits. data-recent-panel-more-unit exposes
7172
+ the unit tspan for tests. */}
7173
+ {/* Round 344 / Loop: footer hover gains letter-spacing
7174
+ tween 0.2 → 0.3. R325 set rest letter-spacing
7175
+ 0.2 to join the editorial-spacing family; R344
7176
+ adds a 0.1px hover spread that layers on top of
7177
+ R195 cyan fill + R325 spacing + R133 underline
7178
+ so the footer reads "lit up and spaced" on
7179
+ hover — sibling to R218/R219/R220 pin-signature
7180
+ letter-spacing family applied to a hover-only
7181
+ surface. transition list extends letter-spacing
7182
+ 200ms ease-out alongside the existing opacity/
7183
+ fill easings. */}
7077
7184
  <text
7078
7185
  x="115" y="82"
7079
7186
  textAnchor="middle"
@@ -7081,14 +7188,15 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7081
7188
  fontSize="9"
7082
7189
  fontFamily="monospace"
7083
7190
  fontStyle="italic"
7084
- letterSpacing="0.2"
7191
+ letterSpacing={hoveredRecentMore ? '0.3' : '0.2'}
7085
7192
  opacity={hoveredRecentMore ? 0.85 : 0.55}
7086
7193
  textDecoration={hoveredRecentMore ? 'underline' : 'none'}
7087
7194
  data-recent-panel-more={moreCount}
7088
7195
  data-recent-panel-more-hovered={hoveredRecentMore ? 'true' : 'false'}
7089
- style={{ transition: 'opacity 150ms ease-out, fill 200ms ease-out' }}
7196
+ style={{ transition: 'opacity 150ms ease-out, fill 200ms ease-out, letter-spacing 200ms ease-out' }}
7090
7197
  >
7091
- {label}
7198
+ {`+ ${moreCount}`}
7199
+ <tspan opacity="0.7" data-recent-panel-more-unit>{` more flow${moreCount === 1 ? '' : 's'}`}</tspan>
7092
7200
  </text>
7093
7201
  </g>
7094
7202
  );
@@ -7137,7 +7245,12 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7137
7245
  x="0" y="0" width="224" height="88" rx="10"
7138
7246
  fill={pal.legendBox.fill}
7139
7247
  stroke={pal.legendBox.stroke}
7140
- opacity={isLight ? 0.97 : 0.92}
7248
+ // R348 sibling — legend panel rect opacity hover-state
7249
+ // bump 0.92 → 0.97 (cyber) / 0.97 → 1 (light) on
7250
+ // hoveredPanel === 'legend'. Pairs with the recent-signal
7251
+ // panel rect above so the two corner panels' hover cues
7252
+ // stay symmetric. Geometry-safe (paint-only).
7253
+ opacity={hoveredPanel === 'legend' ? (isLight ? 1 : 0.97) : (isLight ? 0.97 : 0.92)}
7141
7254
  style={{
7142
7255
  filter: hoveredPanel === 'legend'
7143
7256
  ? (isLight ? 'drop-shadow(0 4px 12px rgba(15,23,42,0.14))'
@@ -7160,7 +7273,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7160
7273
  surrounding chrome eased; R266 closes both at once. */}
7161
7274
  {/* R301: sibling to recent-signal panel title above —
7162
7275
  same letterSpacing 0.3 for editorial parity. */}
7163
- <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing="0.3" style={{ transition: 'fill 200ms ease-out' }} data-legend-panel-title>legend</text>
7276
+ {/* R345 sibling — legend panel title same hover letter-
7277
+ spacing tween 0.3 → 0.4 on panel hover. */}
7278
+ <text x="13" y="21" fill={pal.legendHeadline} fontSize="12" fontFamily="monospace" fontWeight="700" letterSpacing={hoveredPanel === 'legend' ? '0.4' : '0.3'} style={{ transition: 'fill 200ms ease-out, letter-spacing 200ms ease-out' }} data-legend-panel-title>legend</text>
7164
7279
  {/* Round 257 / Loop: legend panel header count picks up the
7165
7280
  symmetric 13L/13R inner-padding pattern from the recent-
7166
7281
  signal panel. Pre-R257 the legend header was 13px from
@@ -7224,7 +7339,14 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7224
7339
  <text
7225
7340
  x="211" y="21" textAnchor="end"
7226
7341
  fill={pal.legendAccent} fontSize="10" fontFamily="monospace" fontWeight="600"
7342
+ // R349 sibling — legend panel header count picks up
7343
+ // letterSpacing="0.2", one tier below the R301 panel
7344
+ // title 0.3. Pairs with the recent-signal panel count
7345
+ // letter-spacing above so the two corner panels' header
7346
+ // typography stays editorially symmetric.
7347
+ letterSpacing="0.2"
7227
7348
  data-legend-panel-count
7349
+ data-legend-panel-count-letter-spacing="0.2"
7228
7350
  style={{
7229
7351
  transition: 'fill 200ms ease-out',
7230
7352
  fontVariantNumeric: 'tabular-nums',
@@ -7766,7 +7888,13 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7766
7888
  resetView();
7767
7889
  }
7768
7890
  }}
7891
+ // R346: viewport rect hover affordance driven by parent.
7892
+ onMouseEnter={() => setHoveredMinimap(true)}
7893
+ onMouseLeave={() => setHoveredMinimap(false)}
7894
+ onFocus={() => setHoveredMinimap(true)}
7895
+ onBlur={() => setHoveredMinimap(false)}
7769
7896
  data-topo-minimap
7897
+ data-topo-minimap-hovered={hoveredMinimap ? 'true' : 'false'}
7770
7898
  >
7771
7899
  <svg width={MW} height={MH} viewBox={`0 0 ${MW} ${MH}`} style={{ display: 'block' }}>
7772
7900
  {/* Round 198 / Loop: minimap dots gain smooth status
@@ -7845,13 +7973,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7845
7973
  x={Math.max(0, rectX)} y={Math.max(0, rectY)}
7846
7974
  width={Math.max(0, Math.min(MW - Math.max(0, rectX), rectW))}
7847
7975
  height={Math.max(0, Math.min(MH - Math.max(0, rectY), rectH))}
7848
- fill="none" stroke={pal.legendAccent} strokeWidth="1.5" opacity="0.9"
7976
+ fill="none" stroke={pal.legendAccent}
7977
+ // R346: strokeWidth + opacity tween on container hover.
7978
+ strokeWidth={hoveredMinimap ? '1.75' : '1.5'}
7979
+ opacity={hoveredMinimap ? '1' : '0.9'}
7849
7980
  data-topo-minimap-viewport
7850
7981
  data-topo-minimap-viewport-smooth={smoothView ? 'true' : 'false'}
7982
+ data-topo-minimap-viewport-hover={hoveredMinimap ? 'true' : 'false'}
7851
7983
  style={{
7852
7984
  transition: smoothView
7853
- ? 'x 280ms ease-out, y 280ms ease-out, width 280ms ease-out, height 280ms ease-out'
7854
- : 'none',
7985
+ ? 'x 280ms ease-out, y 280ms ease-out, width 280ms ease-out, height 280ms ease-out, stroke-width 200ms ease-out, opacity 200ms ease-out'
7986
+ : 'stroke-width 200ms ease-out, opacity 200ms ease-out',
7855
7987
  } as React.CSSProperties}
7856
7988
  />
7857
7989
  </svg>
@@ -8062,11 +8194,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8062
8194
  chromePopping === 'zoom-in' || chromePopping === 'zoom-out'
8063
8195
  ? 'true' : 'false'
8064
8196
  }
8197
+ data-topo-chrome-zoom-level-hover={hoveredZoomLevel ? 'true' : 'false'}
8198
+ onMouseEnter={() => setHoveredZoomLevel(true)}
8199
+ onMouseLeave={() => setHoveredZoomLevel(false)}
8065
8200
  style={{
8066
8201
  color: pal.legendText,
8067
8202
  borderColor: pal.containerBorder,
8068
8203
  minWidth: 46,
8069
8204
  display: 'inline-block',
8205
+ // R347: letter-spacing hover tween — extends R344/R345
8206
+ // hover-letter-spacing family into the chrome strip.
8207
+ letterSpacing: hoveredZoomLevel ? '0.5px' : '0',
8070
8208
  /* Round 264 / Loop: zoom level readout gains theme-toggle
8071
8209
  transition. The span has theme-driven color (pal.
8072
8210
  legendText) + border-x (pal.containerBorder via the
@@ -8075,7 +8213,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8075
8213
  on theme flip while siblings eased. Sibling treatment
8076
8214
  to the nodeSize + zoom wrapper transitions added this
8077
8215
  round. */
8078
- transition: 'color 200ms ease-out, border-color 200ms ease-out',
8216
+ transition: 'color 200ms ease-out, border-color 200ms ease-out, letter-spacing 200ms ease-out',
8079
8217
  }}
8080
8218
  title="Current zoom level"
8081
8219
  >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.0",
3
+ "version": "0.5.1-preview.10",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,86 @@
1
+ /* Round 342 verification: active-links chip freshness suffix wrapper
2
+ * lifts text-gray-500 → text-gray-400 (R317 subordinate-text-lift
3
+ * family). Affects the literal "last {rel}" text; the freshness dot
4
+ * keeps its own inline color via `style={{color: dotColor}}`.
5
+ *
6
+ * Contract:
7
+ * - The wrapper span containing [data-active-links-freshness-dot]
8
+ * has className containing 'text-gray-400' (not 'text-gray-500').
9
+ * - Wrapper textContent includes 'last' (the trailing literal).
10
+ * - Freshness dot keeps its own color (not the wrapper's).
11
+ * - R341 pin-intersection " pins" unit + R317/R318 chrome
12
+ * regressions intact.
13
+ * - R294 pulse absent.
14
+ */
15
+ import { chromium } from 'playwright';
16
+ import { readFileSync } from 'node:fs';
17
+
18
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
19
+ const browser = await chromium.launch({ headless: true });
20
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
21
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
22
+ await ctx.addInitScript(() => {
23
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
24
+ });
25
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
26
+ await ctx.route('**/api/hub/status*', async (route) => {
27
+ const r = await route.fetch();
28
+ const b = await r.json();
29
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
30
+ const mk = (alias) => ({
31
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
32
+ network_id: nid, project_dir: null,
33
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
34
+ });
35
+ await route.fulfill({ response: r, json: { ...b, sessions: [
36
+ mk('alpha'), mk('beta'), mk('gamma'),
37
+ ] } });
38
+ });
39
+ // One recent message → active-links chip's freshness suffix renders.
40
+ const now = Date.now();
41
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
42
+ { id: 'm1', from_alias: 'alpha', to_alias: 'beta', content: 'ping',
43
+ network_id: 'default', created_at: new Date(now - 5000).toISOString() },
44
+ ] } }));
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
+ await page.waitForSelector('[data-active-links-freshness-dot]', { timeout: 15000 });
50
+ await page.waitForTimeout(300);
51
+
52
+ const probe = await page.evaluate(() => {
53
+ const dot = document.querySelector('[data-active-links-freshness-dot]');
54
+ const wrapper = dot?.parentElement || null;
55
+ return {
56
+ wrapperClass: wrapper?.className ?? '',
57
+ wrapperText: wrapper?.textContent ?? null,
58
+ dotInlineColor: dot?.getAttribute('style') ?? '',
59
+ // R341 regression.
60
+ pinIntersectionUnit: document.querySelector('[data-pin-intersection-unit]')?.className ?? '',
61
+ layoutInactiveCls: document.querySelector('[data-topo-chrome-layout="grid"]')?.className ?? '',
62
+ layoutActiveCls: document.querySelector('[data-topo-chrome-layout="ring"]')?.className ?? '',
63
+ pulseCount: document.querySelectorAll('[data-pulse-wrapper]').length,
64
+ };
65
+ });
66
+ await browser.close();
67
+
68
+ const results = {
69
+ wrapper_has_gray_400: /text-gray-400/.test(probe.wrapperClass),
70
+ wrapper_no_gray_500: !/text-gray-500/.test(probe.wrapperClass),
71
+ wrapper_text_last: /\blast\b/.test(probe.wrapperText || ''),
72
+ dot_has_inline_color: /color:/.test(probe.dotInlineColor),
73
+ // R341 regression — only triggers when a pin is active. Test
74
+ // doesn't click filters, so accept null OR opacity-70.
75
+ r341_pin_unit_or_absent: probe.pinIntersectionUnit === '' ||
76
+ /opacity-70/.test(probe.pinIntersectionUnit),
77
+ // R317 / R318 chrome regression.
78
+ r317_inactive_gray_400: probe.layoutInactiveCls.includes('text-gray-400'),
79
+ r318_active_font_medium: probe.layoutActiveCls.includes('font-medium'),
80
+ r294_pulse_absent: probe.pulseCount === 0,
81
+ };
82
+ const ok = Object.values(results).every(Boolean);
83
+ console.log(`${ok ? '✅' : '❌'} active-links freshness wrapper gray-400:`, JSON.stringify(results),
84
+ '\n wrapper class:', probe.wrapperClass,
85
+ '\n wrapper text:', JSON.stringify(probe.wrapperText));
86
+ process.exit(ok ? 0 : 1);