@sleep2agi/agent-network-dashboard 0.5.1-preview.16 → 0.5.1-preview.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
  132. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  137. package/.next/server/middleware-build-manifest.js +3 -3
  138. package/.next/server/pages/404.html +2 -2
  139. package/.next/server/pages/500.html +1 -1
  140. package/.next/static/chunks/{0gyvlr2zy4bzy.js → 09a_ilyog0wxi.js} +1 -1
  141. package/.next/static/chunks/{1356t2icfui5w.js → 0gg04.xgulgx_.js} +1 -1
  142. package/.next/static/chunks/{0_e~fos.lx993.js → 0shp~tnmp1~r8.js} +1 -1
  143. package/.next/static/chunks/{0kt7qs66ra2.2.css → 0~oj~gm3ck7o8.css} +1 -1
  144. package/.next/trace +2 -2
  145. package/.next/trace-build +1 -1
  146. package/app/components/TopoGraph.tsx +82 -5
  147. package/package.json +1 -1
  148. package/scripts/topo-filter-pill-x-hover-scale-test.mjs +99 -0
  149. package/scripts/topo-freshness-suffix-tabular-test.mjs +88 -0
  150. /package/.next/static/{36bcyNjNqbhSJ8Yz3eWV2 → QFc9YAO0lHpLEBXKZGefL}/_buildManifest.js +0 -0
  151. /package/.next/static/{36bcyNjNqbhSJ8Yz3eWV2 → QFc9YAO0lHpLEBXKZGefL}/_clientMiddlewareManifest.js +0 -0
  152. /package/.next/static/{36bcyNjNqbhSJ8Yz3eWV2 → QFc9YAO0lHpLEBXKZGefL}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":304,"timestamp":134794825405,"id":4,"parentId":1,"tags":{},"startTime":1778942767072,"traceId":"b74f6a2ef7571bdd"},{"name":"load-custom-routes","duration":721,"timestamp":134794825864,"id":5,"parentId":1,"tags":{},"startTime":1778942767072,"traceId":"b74f6a2ef7571bdd"},{"name":"create-dist-dir","duration":875,"timestamp":134794826661,"id":6,"parentId":1,"tags":{},"startTime":1778942767073,"traceId":"b74f6a2ef7571bdd"},{"name":"clean","duration":33602,"timestamp":134794828244,"id":7,"parentId":1,"tags":{},"startTime":1778942767075,"traceId":"b74f6a2ef7571bdd"},{"name":"discover-routes","duration":13012,"timestamp":134794945431,"id":8,"parentId":1,"tags":{},"startTime":1778942767192,"traceId":"b74f6a2ef7571bdd"},{"name":"create-root-mapping","duration":127,"timestamp":134794958504,"id":9,"parentId":1,"tags":{},"startTime":1778942767205,"traceId":"b74f6a2ef7571bdd"},{"name":"generate-route-types","duration":33884,"timestamp":134794961811,"id":10,"parentId":1,"tags":{},"startTime":1778942767208,"traceId":"b74f6a2ef7571bdd"},{"name":"public-dir-conflict-check","duration":119,"timestamp":134794995795,"id":11,"parentId":1,"tags":{},"startTime":1778942767242,"traceId":"b74f6a2ef7571bdd"},{"name":"generate-routes-manifest","duration":5348,"timestamp":134794996093,"id":12,"parentId":1,"tags":{},"startTime":1778942767242,"traceId":"b74f6a2ef7571bdd"},{"name":"run-turbopack","duration":5531855,"timestamp":134795006882,"id":14,"parentId":1,"tags":{},"startTime":1778942767253,"traceId":"b74f6a2ef7571bdd"},{"name":"turbopack-build-events","duration":112,"timestamp":134795332914,"id":15,"parentId":1,"tags":{},"startTime":1778942767579,"traceId":"b74f6a2ef7571bdd"},{"name":"run-typescript","duration":9048733,"timestamp":134800547886,"id":16,"parentId":1,"tags":{},"startTime":1778942772794,"traceId":"b74f6a2ef7571bdd"},{"name":"generate-required-server-files","duration":2218,"timestamp":134809597886,"id":18,"parentId":1,"tags":{},"startTime":1778942781844,"traceId":"b74f6a2ef7571bdd"},{"name":"check-static-error-page","duration":14117,"timestamp":134809741865,"id":20,"parentId":19,"tags":{},"startTime":1778942781988,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":393586,"timestamp":134809758938,"id":65,"parentId":22,"tags":{},"startTime":1778942782005,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":407704,"timestamp":134809744968,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778942781991,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":525044,"timestamp":134809761319,"id":71,"parentId":30,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":537778,"timestamp":134809748683,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778942781995,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":527703,"timestamp":134809760553,"id":67,"parentId":26,"tags":{},"startTime":1778942782007,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":540106,"timestamp":134809748213,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778942781994,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":530208,"timestamp":134809761399,"id":72,"parentId":32,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":542581,"timestamp":134809749074,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778942781995,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":536307,"timestamp":134809760366,"id":66,"parentId":25,"tags":{},"startTime":1778942782007,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":548705,"timestamp":134809748024,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778942781994,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":535238,"timestamp":134809761666,"id":74,"parentId":34,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":547734,"timestamp":134809749324,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778942781996,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":546345,"timestamp":134809761700,"id":75,"parentId":35,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":558667,"timestamp":134809749441,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778942781996,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":546560,"timestamp":134809761729,"id":76,"parentId":36,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":558442,"timestamp":134809749878,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778942781996,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":550700,"timestamp":134809761577,"id":73,"parentId":33,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":563115,"timestamp":134809749212,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778942781995,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":550865,"timestamp":134809761784,"id":78,"parentId":38,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":562447,"timestamp":134809750242,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778942781997,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":560268,"timestamp":134809761818,"id":80,"parentId":40,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":571684,"timestamp":134809750446,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778942781997,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":560533,"timestamp":134809761759,"id":77,"parentId":37,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":572225,"timestamp":134809750095,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778942781996,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":563574,"timestamp":134809761137,"id":70,"parentId":29,"tags":{},"startTime":1778942782007,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":576263,"timestamp":134809748556,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778942781995,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":566640,"timestamp":134809761849,"id":82,"parentId":44,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":577290,"timestamp":134809751243,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":566866,"timestamp":134809761802,"id":79,"parentId":39,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":578354,"timestamp":134809750343,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778942781997,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":567003,"timestamp":134809761831,"id":81,"parentId":42,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":578067,"timestamp":134809750806,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778942781997,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":568109,"timestamp":134809761866,"id":83,"parentId":45,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":578661,"timestamp":134809751382,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":572136,"timestamp":134809761879,"id":84,"parentId":46,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":582561,"timestamp":134809751493,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":573255,"timestamp":134809761893,"id":85,"parentId":47,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":583590,"timestamp":134809751600,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":575391,"timestamp":134809761909,"id":86,"parentId":48,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":585634,"timestamp":134809751704,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":577883,"timestamp":134809761936,"id":88,"parentId":50,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":587935,"timestamp":134809751929,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":578899,"timestamp":134809761952,"id":89,"parentId":51,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":588858,"timestamp":134809752041,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":583716,"timestamp":134809760789,"id":69,"parentId":28,"tags":{},"startTime":1778942782007,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":596113,"timestamp":134809748444,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778942781995,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":572602,"timestamp":134809773619,"id":90,"parentId":24,"tags":{},"startTime":1778942782020,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":600754,"timestamp":134809745512,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778942781992,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":571608,"timestamp":134809779122,"id":93,"parentId":43,"tags":{},"startTime":1778942782025,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":599845,"timestamp":134809750933,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778942781997,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":573445,"timestamp":134809777709,"id":92,"parentId":41,"tags":{},"startTime":1778942782024,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":600657,"timestamp":134809750552,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778942781997,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":593658,"timestamp":134809758573,"id":64,"parentId":21,"tags":{},"startTime":1778942782005,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":608857,"timestamp":134809743420,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778942781990,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":582277,"timestamp":134809774780,"id":91,"parentId":31,"tags":{},"startTime":1778942782021,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":608318,"timestamp":134809748794,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778942781995,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":601782,"timestamp":134809760679,"id":68,"parentId":27,"tags":{},"startTime":1778942782007,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":614168,"timestamp":134809748333,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778942781995,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":619439,"timestamp":134809761920,"id":87,"parentId":49,"tags":{},"startTime":1778942782008,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":629588,"timestamp":134809751833,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778942781998,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":626113,"timestamp":134809785784,"id":97,"parentId":54,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":659114,"timestamp":134809752858,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778942781999,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":630802,"timestamp":134809785797,"id":98,"parentId":55,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":663606,"timestamp":134809753132,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778942781999,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":633843,"timestamp":134809785768,"id":96,"parentId":53,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":666994,"timestamp":134809752684,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778942781999,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":635804,"timestamp":134809785965,"id":101,"parentId":59,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":667239,"timestamp":134809754582,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778942782001,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":638819,"timestamp":134809785991,"id":102,"parentId":61,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":669557,"timestamp":134809755309,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778942782002,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":643576,"timestamp":134809785718,"id":94,"parentId":23,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":684073,"timestamp":134809745271,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778942781992,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":643410,"timestamp":134809786028,"id":103,"parentId":62,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":673998,"timestamp":134809755474,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778942782002,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":644607,"timestamp":134809786045,"id":104,"parentId":63,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":675021,"timestamp":134809755673,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778942782002,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":631583,"timestamp":134809800800,"id":105,"parentId":57,"tags":{},"startTime":1778942782047,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":678754,"timestamp":134809753667,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778942782000,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":624783,"timestamp":134809809904,"id":106,"parentId":60,"tags":{},"startTime":1778942782056,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":679919,"timestamp":134809754804,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778942782001,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":650799,"timestamp":134809785828,"id":100,"parentId":58,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":682326,"timestamp":134809754336,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778942782001,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":662778,"timestamp":134809785751,"id":95,"parentId":52,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":696068,"timestamp":134809752497,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778942781999,"traceId":"b74f6a2ef7571bdd"},{"name":"is-page-static","duration":671045,"timestamp":134809785812,"id":99,"parentId":56,"tags":{},"startTime":1778942782032,"traceId":"b74f6a2ef7571bdd"},{"name":"check-page","duration":703505,"timestamp":134809753385,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778942782000,"traceId":"b74f6a2ef7571bdd"},{"name":"static-check","duration":716052,"timestamp":134809740884,"id":19,"parentId":1,"tags":{},"startTime":1778942781987,"traceId":"b74f6a2ef7571bdd"}]
2
- [{"name":"write-routes-manifest","duration":629,"timestamp":134810467157,"id":108,"parentId":1,"tags":{},"startTime":1778942782713,"traceId":"b74f6a2ef7571bdd"},{"name":"load-dotenv","duration":55,"timestamp":134810479507,"id":111,"parentId":110,"tags":{},"startTime":1778942782726,"traceId":"b74f6a2ef7571bdd"},{"name":"run-export-path-map","duration":533,"timestamp":134810482449,"id":112,"parentId":110,"tags":{},"startTime":1778942782729,"traceId":"b74f6a2ef7571bdd"},{"name":"next-export","duration":541674,"timestamp":134810478133,"id":110,"parentId":1,"tags":{},"startTime":1778942782724,"traceId":"b74f6a2ef7571bdd"},{"name":"move-exported-app-not-found-","duration":494,"timestamp":134811023143,"id":113,"parentId":109,"tags":{},"startTime":1778942783269,"traceId":"b74f6a2ef7571bdd"},{"name":"move-exported-app-global-error-","duration":435,"timestamp":134811023725,"id":114,"parentId":109,"tags":{},"startTime":1778942783270,"traceId":"b74f6a2ef7571bdd"},{"name":"static-generation","duration":554338,"timestamp":134810471766,"id":109,"parentId":1,"tags":{},"startTime":1778942782718,"traceId":"b74f6a2ef7571bdd"},{"name":"write-routes-manifest","duration":410,"timestamp":134811026329,"id":115,"parentId":1,"tags":{},"startTime":1778942783273,"traceId":"b74f6a2ef7571bdd"},{"name":"print-tree-view","duration":5251,"timestamp":134811044612,"id":116,"parentId":1,"tags":{},"startTime":1778942783291,"traceId":"b74f6a2ef7571bdd"},{"name":"write-route-bundle-stats","duration":12077,"timestamp":134811049893,"id":117,"parentId":1,"tags":{},"startTime":1778942783296,"traceId":"b74f6a2ef7571bdd"},{"name":"telemetry-flush","duration":24560,"timestamp":134811061997,"id":118,"parentId":1,"tags":{},"startTime":1778942783308,"traceId":"b74f6a2ef7571bdd"},{"name":"next-build","duration":16317976,"timestamp":134794768610,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778942767015,"traceId":"b74f6a2ef7571bdd"}]
1
+ [{"name":"generate-buildid","duration":254,"timestamp":135400722456,"id":4,"parentId":1,"tags":{},"startTime":1778943372969,"traceId":"5158811ffc9ca72e"},{"name":"load-custom-routes","duration":488,"timestamp":135400722849,"id":5,"parentId":1,"tags":{},"startTime":1778943372969,"traceId":"5158811ffc9ca72e"},{"name":"create-dist-dir","duration":728,"timestamp":135400723394,"id":6,"parentId":1,"tags":{},"startTime":1778943372970,"traceId":"5158811ffc9ca72e"},{"name":"clean","duration":30796,"timestamp":135400724795,"id":7,"parentId":1,"tags":{},"startTime":1778943372971,"traceId":"5158811ffc9ca72e"},{"name":"discover-routes","duration":9396,"timestamp":135400840920,"id":8,"parentId":1,"tags":{},"startTime":1778943373087,"traceId":"5158811ffc9ca72e"},{"name":"create-root-mapping","duration":165,"timestamp":135400850402,"id":9,"parentId":1,"tags":{},"startTime":1778943373097,"traceId":"5158811ffc9ca72e"},{"name":"generate-route-types","duration":33220,"timestamp":135400853258,"id":10,"parentId":1,"tags":{},"startTime":1778943373100,"traceId":"5158811ffc9ca72e"},{"name":"public-dir-conflict-check","duration":95,"timestamp":135400886563,"id":11,"parentId":1,"tags":{},"startTime":1778943373133,"traceId":"5158811ffc9ca72e"},{"name":"generate-routes-manifest","duration":4751,"timestamp":135400886770,"id":12,"parentId":1,"tags":{},"startTime":1778943373133,"traceId":"5158811ffc9ca72e"},{"name":"run-turbopack","duration":5851674,"timestamp":135400897827,"id":14,"parentId":1,"tags":{},"startTime":1778943373144,"traceId":"5158811ffc9ca72e"},{"name":"turbopack-build-events","duration":109,"timestamp":135401192802,"id":15,"parentId":1,"tags":{},"startTime":1778943373439,"traceId":"5158811ffc9ca72e"},{"name":"run-typescript","duration":9392092,"timestamp":135406762355,"id":16,"parentId":1,"tags":{},"startTime":1778943379009,"traceId":"5158811ffc9ca72e"},{"name":"generate-required-server-files","duration":2420,"timestamp":135416155458,"id":18,"parentId":1,"tags":{},"startTime":1778943388402,"traceId":"5158811ffc9ca72e"},{"name":"check-static-error-page","duration":13518,"timestamp":135416293466,"id":20,"parentId":19,"tags":{},"startTime":1778943388540,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":443132,"timestamp":135416310595,"id":65,"parentId":22,"tags":{},"startTime":1778943388557,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":458008,"timestamp":135416295903,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778943388542,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":585627,"timestamp":135416311339,"id":70,"parentId":29,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":597980,"timestamp":135416299105,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778943388545,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":592128,"timestamp":135416311506,"id":71,"parentId":30,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":604439,"timestamp":135416299267,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778943388546,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":598955,"timestamp":135416311736,"id":73,"parentId":33,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":610930,"timestamp":135416299825,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778943388546,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":599357,"timestamp":135416311575,"id":72,"parentId":32,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":611288,"timestamp":135416299675,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778943388546,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":602473,"timestamp":135416311815,"id":74,"parentId":34,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":614375,"timestamp":135416299963,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778943388546,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":604513,"timestamp":135416311845,"id":75,"parentId":35,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":616294,"timestamp":135416300123,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778943388546,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":607186,"timestamp":135416311861,"id":76,"parentId":36,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":618466,"timestamp":135416300623,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778943388547,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":609288,"timestamp":135416310970,"id":68,"parentId":27,"tags":{},"startTime":1778943388557,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":621470,"timestamp":135416298845,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778943388545,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":609348,"timestamp":135416311890,"id":77,"parentId":37,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":620504,"timestamp":135416300770,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778943388547,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":611650,"timestamp":135416311907,"id":78,"parentId":38,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":622731,"timestamp":135416300863,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778943388547,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":616134,"timestamp":135416310864,"id":67,"parentId":26,"tags":{},"startTime":1778943388557,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":628352,"timestamp":135416298713,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778943388545,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":615309,"timestamp":135416311931,"id":80,"parentId":40,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":626236,"timestamp":135416301040,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778943388547,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":621768,"timestamp":135416311972,"id":83,"parentId":45,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":631607,"timestamp":135416302169,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778943388548,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":622577,"timestamp":135416311949,"id":81,"parentId":42,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":633106,"timestamp":135416301474,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778943388548,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":628539,"timestamp":135416311999,"id":85,"parentId":47,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":637705,"timestamp":135416302876,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778943388549,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":632525,"timestamp":135416312032,"id":86,"parentId":48,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":641625,"timestamp":135416302986,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778943388549,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":636104,"timestamp":135416311986,"id":84,"parentId":46,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":645845,"timestamp":135416302284,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778943388549,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":638240,"timestamp":135416312048,"id":87,"parentId":49,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":647226,"timestamp":135416303102,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778943388549,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":640828,"timestamp":135416311093,"id":69,"parentId":28,"tags":{},"startTime":1778943388557,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":652988,"timestamp":135416298965,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778943388545,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":640886,"timestamp":135416312061,"id":88,"parentId":50,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":649815,"timestamp":135416303171,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778943388549,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":657739,"timestamp":135416312074,"id":89,"parentId":51,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":666633,"timestamp":135416303239,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778943388550,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":658986,"timestamp":135416316272,"id":91,"parentId":31,"tags":{},"startTime":1778943388563,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":675894,"timestamp":135416299412,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778943388546,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":663511,"timestamp":135416311963,"id":82,"parentId":44,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":673528,"timestamp":135416301975,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778943388548,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":658346,"timestamp":135416317447,"id":92,"parentId":41,"tags":{},"startTime":1778943388564,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":674695,"timestamp":135416301134,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778943388547,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":658356,"timestamp":135416318899,"id":93,"parentId":43,"tags":{},"startTime":1778943388565,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":675621,"timestamp":135416301671,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778943388548,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":666297,"timestamp":135416311918,"id":79,"parentId":39,"tags":{},"startTime":1778943388558,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":677324,"timestamp":135416300930,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778943388547,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":667391,"timestamp":135416315240,"id":90,"parentId":24,"tags":{},"startTime":1778943388562,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":686196,"timestamp":135416296480,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778943388543,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":674887,"timestamp":135416310754,"id":66,"parentId":25,"tags":{},"startTime":1778943388557,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":687142,"timestamp":135416298542,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778943388545,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":721597,"timestamp":135416310017,"id":64,"parentId":21,"tags":{},"startTime":1778943388556,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":737085,"timestamp":135416294588,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778943388541,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":717317,"timestamp":135416321087,"id":96,"parentId":53,"tags":{},"startTime":1778943388567,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":734618,"timestamp":135416303849,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778943388550,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":724958,"timestamp":135416321107,"id":98,"parentId":55,"tags":{},"startTime":1778943388567,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":741815,"timestamp":135416304320,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778943388551,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":725249,"timestamp":135416321075,"id":95,"parentId":52,"tags":{},"startTime":1778943388567,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":742726,"timestamp":135416303649,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778943388550,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":725392,"timestamp":135416321130,"id":100,"parentId":58,"tags":{},"startTime":1778943388567,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":741276,"timestamp":135416305276,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778943388552,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":725432,"timestamp":135416321229,"id":101,"parentId":59,"tags":{},"startTime":1778943388568,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":741174,"timestamp":135416305528,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778943388552,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":736666,"timestamp":135416321247,"id":102,"parentId":61,"tags":{},"startTime":1778943388568,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":751723,"timestamp":135416306262,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778943388553,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":737091,"timestamp":135416321047,"id":94,"parentId":23,"tags":{},"startTime":1778943388567,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":762001,"timestamp":135416296177,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778943388542,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":715464,"timestamp":135416345826,"id":106,"parentId":57,"tags":{},"startTime":1778943388592,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":756509,"timestamp":135416304826,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778943388551,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":729043,"timestamp":135416332520,"id":105,"parentId":60,"tags":{},"startTime":1778943388579,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":755853,"timestamp":135416305751,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778943388552,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":743586,"timestamp":135416321095,"id":97,"parentId":54,"tags":{},"startTime":1778943388567,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":760678,"timestamp":135416304054,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778943388550,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":744872,"timestamp":135416321259,"id":103,"parentId":62,"tags":{},"startTime":1778943388568,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":759696,"timestamp":135416306483,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778943388553,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":747818,"timestamp":135416321267,"id":104,"parentId":63,"tags":{},"startTime":1778943388568,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":762468,"timestamp":135416306668,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778943388553,"traceId":"5158811ffc9ca72e"},{"name":"is-page-static","duration":765282,"timestamp":135416321119,"id":99,"parentId":56,"tags":{},"startTime":1778943388567,"traceId":"5158811ffc9ca72e"},{"name":"check-page","duration":781877,"timestamp":135416304594,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778943388551,"traceId":"5158811ffc9ca72e"},{"name":"static-check","duration":793756,"timestamp":135416292774,"id":19,"parentId":1,"tags":{},"startTime":1778943388539,"traceId":"5158811ffc9ca72e"}]
2
+ [{"name":"write-routes-manifest","duration":461,"timestamp":135417096788,"id":108,"parentId":1,"tags":{},"startTime":1778943389343,"traceId":"5158811ffc9ca72e"},{"name":"load-dotenv","duration":48,"timestamp":135417111675,"id":111,"parentId":110,"tags":{},"startTime":1778943389358,"traceId":"5158811ffc9ca72e"},{"name":"run-export-path-map","duration":1056,"timestamp":135417114751,"id":112,"parentId":110,"tags":{},"startTime":1778943389361,"traceId":"5158811ffc9ca72e"},{"name":"next-export","duration":663665,"timestamp":135417110443,"id":110,"parentId":1,"tags":{},"startTime":1778943389357,"traceId":"5158811ffc9ca72e"},{"name":"move-exported-app-not-found-","duration":517,"timestamp":135417777136,"id":113,"parentId":109,"tags":{},"startTime":1778943390023,"traceId":"5158811ffc9ca72e"},{"name":"move-exported-app-global-error-","duration":388,"timestamp":135417777752,"id":114,"parentId":109,"tags":{},"startTime":1778943390024,"traceId":"5158811ffc9ca72e"},{"name":"static-generation","duration":677498,"timestamp":135417102443,"id":109,"parentId":1,"tags":{},"startTime":1778943389349,"traceId":"5158811ffc9ca72e"},{"name":"write-routes-manifest","duration":500,"timestamp":135417780197,"id":115,"parentId":1,"tags":{},"startTime":1778943390026,"traceId":"5158811ffc9ca72e"},{"name":"print-tree-view","duration":4308,"timestamp":135417799753,"id":116,"parentId":1,"tags":{},"startTime":1778943390046,"traceId":"5158811ffc9ca72e"},{"name":"write-route-bundle-stats","duration":14730,"timestamp":135417804096,"id":117,"parentId":1,"tags":{},"startTime":1778943390050,"traceId":"5158811ffc9ca72e"},{"name":"telemetry-flush","duration":16422,"timestamp":135417818857,"id":118,"parentId":1,"tags":{},"startTime":1778943390065,"traceId":"5158811ffc9ca72e"},{"name":"next-build","duration":17167218,"timestamp":135400668090,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778943372914,"traceId":"5158811ffc9ca72e"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5531855,"timestamp":134795006882,"id":14,"parentId":1,"tags":{},"startTime":1778942767253,"traceId":"b74f6a2ef7571bdd"},{"name":"turbopack-build-events","duration":112,"timestamp":134795332914,"id":15,"parentId":1,"tags":{},"startTime":1778942767579,"traceId":"b74f6a2ef7571bdd"},{"name":"run-typescript","duration":9048733,"timestamp":134800547886,"id":16,"parentId":1,"tags":{},"startTime":1778942772794,"traceId":"b74f6a2ef7571bdd"},{"name":"static-check","duration":716052,"timestamp":134809740884,"id":19,"parentId":1,"tags":{},"startTime":1778942781987,"traceId":"b74f6a2ef7571bdd"},{"name":"static-generation","duration":554338,"timestamp":134810471766,"id":109,"parentId":1,"tags":{},"startTime":1778942782718,"traceId":"b74f6a2ef7571bdd"},{"name":"telemetry-flush","duration":24560,"timestamp":134811061997,"id":118,"parentId":1,"tags":{},"startTime":1778942783308,"traceId":"b74f6a2ef7571bdd"},{"name":"next-build","duration":16317976,"timestamp":134794768610,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778942767015,"traceId":"b74f6a2ef7571bdd"}]
1
+ [{"name":"run-turbopack","duration":5851674,"timestamp":135400897827,"id":14,"parentId":1,"tags":{},"startTime":1778943373144,"traceId":"5158811ffc9ca72e"},{"name":"turbopack-build-events","duration":109,"timestamp":135401192802,"id":15,"parentId":1,"tags":{},"startTime":1778943373439,"traceId":"5158811ffc9ca72e"},{"name":"run-typescript","duration":9392092,"timestamp":135406762355,"id":16,"parentId":1,"tags":{},"startTime":1778943379009,"traceId":"5158811ffc9ca72e"},{"name":"static-check","duration":793756,"timestamp":135416292774,"id":19,"parentId":1,"tags":{},"startTime":1778943388539,"traceId":"5158811ffc9ca72e"},{"name":"static-generation","duration":677498,"timestamp":135417102443,"id":109,"parentId":1,"tags":{},"startTime":1778943389349,"traceId":"5158811ffc9ca72e"},{"name":"telemetry-flush","duration":16422,"timestamp":135417818857,"id":118,"parentId":1,"tags":{},"startTime":1778943390065,"traceId":"5158811ffc9ca72e"},{"name":"next-build","duration":17167218,"timestamp":135400668090,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778943372914,"traceId":"5158811ffc9ca72e"}]
@@ -2333,7 +2333,21 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2333
2333
  type="button"
2334
2334
  aria-label={`Clear ${pinnedStatus} filter`}
2335
2335
  onClick={(e) => { e.stopPropagation(); setPinnedStatus(null); }}
2336
- className="ml-0.5 leading-none hover:opacity-70"
2336
+ /* Round 356 / Loop: filter pin pill × buttons gain
2337
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2338
+ not legacy transform). Sibling polish to R354 vendor
2339
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2340
+ Pre-R356 the × had only hover:opacity-70 — the target
2341
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2342
+ scale on hover so the click-target reads as "press me"
2343
+ alongside the dim. transform-gpu hint promotes the
2344
+ button to its own compositor layer for crisper edges
2345
+ during the scale tween. transition-transform duration-
2346
+ 200 matches the chrome icon hover-scale timing family.
2347
+ inline-block is default for <button> so no display
2348
+ tweak needed. replace_all covers all 4 filter pin
2349
+ pills (status / group / vendor / edge) at once. */
2350
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2337
2351
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2338
2352
  >×</button>
2339
2353
  </span>
@@ -2368,7 +2382,21 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2368
2382
  type="button"
2369
2383
  aria-label={`Clear group filter ${pinnedGroup}`}
2370
2384
  onClick={(e) => { e.stopPropagation(); setPinnedGroup(null); }}
2371
- className="ml-0.5 leading-none hover:opacity-70"
2385
+ /* Round 356 / Loop: filter pin pill × buttons gain
2386
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2387
+ not legacy transform). Sibling polish to R354 vendor
2388
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2389
+ Pre-R356 the × had only hover:opacity-70 — the target
2390
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2391
+ scale on hover so the click-target reads as "press me"
2392
+ alongside the dim. transform-gpu hint promotes the
2393
+ button to its own compositor layer for crisper edges
2394
+ during the scale tween. transition-transform duration-
2395
+ 200 matches the chrome icon hover-scale timing family.
2396
+ inline-block is default for <button> so no display
2397
+ tweak needed. replace_all covers all 4 filter pin
2398
+ pills (status / group / vendor / edge) at once. */
2399
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2372
2400
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2373
2401
  >×</button>
2374
2402
  </span>
@@ -2419,7 +2447,21 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2419
2447
  type="button"
2420
2448
  aria-label={`Clear vendor filter ${pinnedVendor}`}
2421
2449
  onClick={(e) => { e.stopPropagation(); setPinnedVendor(null); }}
2422
- className="ml-0.5 leading-none hover:opacity-70"
2450
+ /* Round 356 / Loop: filter pin pill × buttons gain
2451
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2452
+ not legacy transform). Sibling polish to R354 vendor
2453
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2454
+ Pre-R356 the × had only hover:opacity-70 — the target
2455
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2456
+ scale on hover so the click-target reads as "press me"
2457
+ alongside the dim. transform-gpu hint promotes the
2458
+ button to its own compositor layer for crisper edges
2459
+ during the scale tween. transition-transform duration-
2460
+ 200 matches the chrome icon hover-scale timing family.
2461
+ inline-block is default for <button> so no display
2462
+ tweak needed. replace_all covers all 4 filter pin
2463
+ pills (status / group / vendor / edge) at once. */
2464
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2423
2465
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2424
2466
  >×</button>
2425
2467
  </span>
@@ -2496,7 +2538,21 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2496
2538
  type="button"
2497
2539
  aria-label={`Clear edge filter ${link.from} → ${link.to}`}
2498
2540
  onClick={(e) => { e.stopPropagation(); setPinnedEdgeKey(null); }}
2499
- className="ml-0.5 leading-none hover:opacity-70"
2541
+ /* Round 356 / Loop: filter pin pill × buttons gain
2542
+ hover:scale-110 (Tailwind 4 modern CSS `scale` property,
2543
+ not legacy transform). Sibling polish to R354 vendor
2544
+ letter glyph + R350/R352/R353 chrome icon hover-scales.
2545
+ Pre-R356 the × had only hover:opacity-70 — the target
2546
+ dimmed under cursor but didn't lift. R356 adds a 10 %
2547
+ scale on hover so the click-target reads as "press me"
2548
+ alongside the dim. transform-gpu hint promotes the
2549
+ button to its own compositor layer for crisper edges
2550
+ during the scale tween. transition-transform duration-
2551
+ 200 matches the chrome icon hover-scale timing family.
2552
+ inline-block is default for <button> so no display
2553
+ tweak needed. replace_all covers all 4 filter pin
2554
+ pills (status / group / vendor / edge) at once. */
2555
+ className="ml-0.5 leading-none hover:opacity-70 transition-transform duration-200 ease-out hover:scale-110 transform-gpu"
2500
2556
  style={{ background: 'transparent', color: 'inherit', cursor: 'pointer', padding: 0 }}
2501
2557
  >×</button>
2502
2558
  </span>
@@ -3017,7 +3073,28 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
3017
3073
  // color: dotColor — the lift only affects the trailing
3018
3074
  // literal "last {rel}" text.
3019
3075
  return (
3020
- <span className="text-gray-400">
3076
+ // Round 357 / Loop: active-links chip freshness
3077
+ // suffix wrapper picks up `tabular-nums` for digit
3078
+ // width-lock. Pre-R357 the literal "last {rel}"
3079
+ // text (e.g. "last 5s ago", "last 10s ago",
3080
+ // "last 1m ago") had natural-figure digits — the
3081
+ // freshness ticker updates every second, so the
3082
+ // 9→10 boundary on the seconds counter and the
3083
+ // 59→60s → 1m flip both jittered ~1-2 px of glyph
3084
+ // width which propagated through the chip-row's
3085
+ // inline-flex layout, nudging the freshness DOT
3086
+ // and the chip's left edge. Tabular-nums on the
3087
+ // wrapper applies to all descendant digits only
3088
+ // (letters render at natural widths) so the
3089
+ // ticker stays planted across every count cross.
3090
+ // Joins the R224-R232 info-density tabular-nums
3091
+ // sweep at the chip-row freshness scope. Pure
3092
+ // paint-level change, no geometry shift on rest.
3093
+ // The R342 text-gray-400 lift + R161 dot freshness
3094
+ // alpha ramp + R317 subordinate-text-lift family
3095
+ // all preserved. data-active-links-freshness-
3096
+ // wrapper attr exposes the wrapper for tests.
3097
+ <span className="text-gray-400 tabular-nums" data-active-links-freshness-wrapper>
3021
3098
  <span
3022
3099
  data-active-links-freshness-dot
3023
3100
  data-active-links-freshness-alpha={alpha.toFixed(2)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.16",
3
+ "version": "0.5.1-preview.18",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,99 @@
1
+ /* Round 356 verification: filter pin pill × buttons gain hover:scale-
2
+ * 110 (Tailwind 4 modern CSS `scale` property). Pre-R356 the × had
3
+ * only hover:opacity-70 — target dimmed under cursor but didn't
4
+ * lift. R356 adds a 10 % scale so the click-target reads as "press
5
+ * me" alongside the dim. Sibling polish to R354 vendor letter glyph
6
+ * + R350/R352/R353 chrome icon hover-scales. replace_all touched
7
+ * all 4 filter pin pill × buttons (status / group / vendor / edge).
8
+ *
9
+ * Tailwind 4 compiles scale-110 to the modern CSS `scale` property
10
+ * — probes getComputedStyle(el).scale (verified during R352).
11
+ *
12
+ * Contract (cyber, status filter pinned to 'working'):
13
+ * - Rest: × button computed scale 'none' (no scale applied).
14
+ * - Hover ×: scale === '1.1'.
15
+ * - Inline transition (computed) contains scale/transform.
16
+ * - Pre-R356 invariants: hover:opacity-70 still applies (button
17
+ * dims on hover), cursor: pointer, data-active-filter attr on
18
+ * parent pill still intact.
19
+ */
20
+ import { chromium } from 'playwright';
21
+ import { readFileSync } from 'node:fs';
22
+
23
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
24
+ const browser = await chromium.launch({ headless: true });
25
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
26
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
27
+ await ctx.addInitScript(() => {
28
+ try {
29
+ localStorage.setItem('anet-theme', 'cyber');
30
+ sessionStorage.setItem('anet_v3_auth', '1');
31
+ localStorage.setItem('anet-pinnedStatus', JSON.stringify('working'));
32
+ } catch {}
33
+ });
34
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
35
+ await ctx.route('**/api/hub/status*', async (route) => {
36
+ const r = await route.fetch();
37
+ const b = await r.json();
38
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
39
+ const mk = (alias) => ({
40
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
41
+ network_id: nid, project_dir: null,
42
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
43
+ });
44
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('a'), mk('b'), mk('c') ] } });
45
+ });
46
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
47
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
48
+
49
+ const page = await ctx.newPage();
50
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
51
+ await page.waitForSelector('[data-working-chip]', { timeout: 15000 });
52
+ const pillVisible = await page.locator('[data-active-filter="status"]').count();
53
+ if (pillVisible === 0) {
54
+ await page.click('[data-working-chip]');
55
+ await page.waitForSelector('[data-active-filter="status"]', { timeout: 5000 });
56
+ }
57
+ await page.waitForTimeout(300);
58
+
59
+ const restProbe = await page.evaluate(() => {
60
+ const pill = document.querySelector('[data-active-filter="status"]');
61
+ const x = pill?.querySelector('button[aria-label^="Clear "]');
62
+ const cs = x ? getComputedStyle(x) : null;
63
+ return {
64
+ scale: cs?.scale ?? null,
65
+ transition: cs?.transition ?? null,
66
+ cursor: cs?.cursor ?? null,
67
+ className: x?.getAttribute('class') ?? null,
68
+ pillAttr: pill?.getAttribute('data-active-filter') ?? null,
69
+ };
70
+ });
71
+
72
+ await page.hover('[data-active-filter="status"] button[aria-label^="Clear "]');
73
+ await page.waitForTimeout(300);
74
+ const hoverProbe = await page.evaluate(() => {
75
+ const x = document.querySelector('[data-active-filter="status"] button[aria-label^="Clear "]');
76
+ return { scale: x ? getComputedStyle(x).scale : null };
77
+ });
78
+
79
+ await browser.close();
80
+
81
+ const isRestScale = (s) => s === 'none' || s === '1' || s === '1 1' || s === null;
82
+ const isHoverScale110 = (s) => s === '1.1' || s === '1.1 1.1';
83
+ const hasTrans = (s, prop) =>
84
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
85
+
86
+ const results = {
87
+ rest_scale_1: isRestScale(restProbe.scale),
88
+ trans_has_scale: hasTrans(restProbe.transition, 'scale') || hasTrans(restProbe.transition, 'transform'),
89
+ cursor_pointer: restProbe.cursor === 'pointer',
90
+ cls_has_hover_op_70: /hover:opacity-70/.test(restProbe.className || ''), // R343
91
+ cls_has_hover_scale: /hover:scale-110/.test(restProbe.className || ''),
92
+ pill_attr_status: restProbe.pillAttr === 'status',
93
+ hover_scale_110: isHoverScale110(hoverProbe.scale),
94
+ };
95
+ const ok = Object.values(results).every(Boolean);
96
+ console.log(`${ok ? '✅' : '❌'} filter pill × hover-scale:`, JSON.stringify(results),
97
+ '\n rest: ', restProbe,
98
+ '\n hover: ', hoverProbe);
99
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,88 @@
1
+ /* Round 357 verification: active-links chip freshness suffix wrapper
2
+ * picks up `tabular-nums` for digit width-lock. Pre-R357 the literal
3
+ * "last {rel}" text (e.g. "last 5s ago", "last 10s ago") had
4
+ * natural-figure digits — the ticker updates every second, so the
5
+ * 9→10 boundary on seconds and 59s→1m flip both jittered ~1-2 px of
6
+ * glyph width, propagating through the inline-flex chip row and
7
+ * nudging the freshness DOT + chip's left edge. Tabular-nums on the
8
+ * wrapper applies to all descendant digits (letters render at
9
+ * natural widths). Joins the R224-R232 info-density tabular-nums
10
+ * sweep at the chip-row freshness scope.
11
+ *
12
+ * Contract (cyber, fresh messages so the suffix renders):
13
+ * - Freshness wrapper element computed font-variant-numeric
14
+ * resolves to 'tabular-nums'.
15
+ * - data-active-links-freshness-wrapper attr present on the span.
16
+ * - The wrapper still carries text-gray-400 (R342) — invariant.
17
+ * - The freshness dot still has its color transition (R342) —
18
+ * invariant.
19
+ * - The active-links chip still mounts with the suffix child.
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 browser = await chromium.launch({ headless: true });
26
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
27
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
28
+ await ctx.addInitScript(() => {
29
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
30
+ });
31
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
32
+ await ctx.route('**/api/hub/status*', async (route) => {
33
+ const r = await route.fetch();
34
+ const b = await r.json();
35
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
36
+ const mk = (alias) => ({
37
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
38
+ network_id: nid, project_dir: null,
39
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
40
+ });
41
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('a'), mk('b'), mk('c') ] } });
42
+ });
43
+ // A fresh message so the active-links chip surfaces a suffix.
44
+ const now = Date.now();
45
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [
46
+ { id: 'm1', from_alias: 'a', to_alias: 'b', content: 'ping',
47
+ network_id: 'default', created_at: new Date(now - 5000).toISOString() },
48
+ ] } }));
49
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
50
+
51
+ const page = await ctx.newPage();
52
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
53
+ await page.waitForSelector('[data-active-links-freshness-wrapper]', { timeout: 15000 });
54
+ await page.waitForTimeout(300);
55
+
56
+ const probe = await page.evaluate(() => {
57
+ const wrap = document.querySelector('[data-active-links-freshness-wrapper]');
58
+ const dot = wrap?.querySelector('[data-active-links-freshness-dot]');
59
+ const cs = wrap ? getComputedStyle(wrap) : null;
60
+ const dotCs = dot ? getComputedStyle(dot) : null;
61
+ return {
62
+ wrapperFontVariant: cs?.fontVariantNumeric ?? null,
63
+ wrapperColor: cs?.color ?? null,
64
+ wrapperCls: wrap?.getAttribute('class') ?? null,
65
+ wrapperText: wrap?.textContent ?? null,
66
+ dotPresent: !!dot,
67
+ dotTransition: dotCs?.transition ?? null,
68
+ dotColor: dotCs?.color ?? null,
69
+ };
70
+ });
71
+
72
+ await browser.close();
73
+
74
+ const hasTrans = (s, prop) =>
75
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
76
+
77
+ const results = {
78
+ tabular_nums: /tabular-nums/.test(probe.wrapperFontVariant || ''),
79
+ cls_has_text_gray: /text-gray-400/.test(probe.wrapperCls || ''), // R342
80
+ cls_has_tabular: /tabular-nums/.test(probe.wrapperCls || ''),
81
+ text_has_last: /last/.test(probe.wrapperText || ''),
82
+ dot_present: probe.dotPresent,
83
+ dot_has_color_trans: hasTrans(probe.dotTransition, 'color'), // R342
84
+ };
85
+ const ok = Object.values(results).every(Boolean);
86
+ console.log(`${ok ? '✅' : '❌'} freshness suffix tabular-nums:`, JSON.stringify(results),
87
+ '\n probe:', probe);
88
+ process.exit(ok ? 0 : 1);