@sleep2agi/agent-network-dashboard 0.4.6-preview.207 → 0.4.6-preview.209

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +2 -2
  15. package/.next/server/app/_not-found.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/admin.html +2 -2
  24. package/.next/server/app/admin.rsc +2 -2
  25. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  26. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  29. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  30. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  31. package/.next/server/app/index.html +2 -2
  32. package/.next/server/app/index.rsc +3 -3
  33. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  34. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  35. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  36. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  37. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  38. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/login.html +2 -2
  40. package/.next/server/app/login.rsc +3 -3
  41. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  42. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  46. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  47. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/logs.html +2 -2
  49. package/.next/server/app/logs.rsc +2 -2
  50. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  51. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  52. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  54. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  55. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  56. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/messages.html +2 -2
  58. package/.next/server/app/messages.rsc +2 -2
  59. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  60. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  61. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  63. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  64. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  65. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/node.html +2 -2
  67. package/.next/server/app/node.rsc +2 -2
  68. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  69. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  70. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  72. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  73. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  74. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/nodes.html +2 -2
  76. package/.next/server/app/nodes.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  78. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  79. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  81. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  82. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  83. package/.next/server/app/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/server-logs.html +2 -2
  86. package/.next/server/app/server-logs.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  88. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  91. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  94. package/.next/server/app/settings/networks.html +2 -2
  95. package/.next/server/app/settings/networks.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  97. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  98. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  100. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  102. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  103. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  105. package/.next/server/app/settings/tokens.html +2 -2
  106. package/.next/server/app/settings/tokens.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  108. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  109. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  111. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  113. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  114. package/.next/server/app/settings.html +2 -2
  115. package/.next/server/app/settings.rsc +3 -3
  116. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  117. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  121. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  122. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  124. package/.next/server/app/tasks.html +2 -2
  125. package/.next/server/app/tasks.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  127. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  128. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  130. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  131. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  132. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  138. package/.next/server/middleware-build-manifest.js +3 -3
  139. package/.next/server/pages/404.html +2 -2
  140. package/.next/server/pages/500.html +1 -1
  141. package/.next/server/server-reference-manifest.js +1 -1
  142. package/.next/server/server-reference-manifest.json +1 -1
  143. package/.next/static/chunks/{1111jy4y_~dvf.js → 0q9cpui_fo49e.js} +1 -1
  144. package/.next/static/chunks/{1543m0kq.tqj9.js → 0resqayw5msbr.js} +1 -1
  145. package/.next/static/chunks/{0tvslajhcjm81.js → 0sf.dl758-r4m.js} +3 -3
  146. package/.next/static/chunks/{01g4iybwpori..css → 0~k1yvhakbob6.css} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +61 -5
  150. package/package.json +1 -1
  151. package/scripts/topo-statusbar-chips-self-hover-test.mjs +177 -0
  152. package/scripts/topo-vendor-chip-self-hover-test.mjs +130 -0
  153. /package/.next/static/{EshJY_-HUKRsxePdvWHt4 → -fdN0jPl4NhHKhsSxuYGW}/_buildManifest.js +0 -0
  154. /package/.next/static/{EshJY_-HUKRsxePdvWHt4 → -fdN0jPl4NhHKhsSxuYGW}/_clientMiddlewareManifest.js +0 -0
  155. /package/.next/static/{EshJY_-HUKRsxePdvWHt4 → -fdN0jPl4NhHKhsSxuYGW}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":260,"timestamp":75110879810,"id":4,"parentId":1,"tags":{},"startTime":1778883083126,"traceId":"9e490e16de2b9eed"},{"name":"load-custom-routes","duration":494,"timestamp":75110880205,"id":5,"parentId":1,"tags":{},"startTime":1778883083126,"traceId":"9e490e16de2b9eed"},{"name":"create-dist-dir","duration":630,"timestamp":75110880743,"id":6,"parentId":1,"tags":{},"startTime":1778883083127,"traceId":"9e490e16de2b9eed"},{"name":"clean","duration":471,"timestamp":75110881998,"id":7,"parentId":1,"tags":{},"startTime":1778883083128,"traceId":"9e490e16de2b9eed"},{"name":"discover-routes","duration":20855,"timestamp":75110964986,"id":8,"parentId":1,"tags":{},"startTime":1778883083211,"traceId":"9e490e16de2b9eed"},{"name":"create-root-mapping","duration":129,"timestamp":75110985901,"id":9,"parentId":1,"tags":{},"startTime":1778883083232,"traceId":"9e490e16de2b9eed"},{"name":"generate-route-types","duration":21310,"timestamp":75110988315,"id":10,"parentId":1,"tags":{},"startTime":1778883083235,"traceId":"9e490e16de2b9eed"},{"name":"public-dir-conflict-check","duration":104,"timestamp":75111009767,"id":11,"parentId":1,"tags":{},"startTime":1778883083256,"traceId":"9e490e16de2b9eed"},{"name":"generate-routes-manifest","duration":4271,"timestamp":75111009980,"id":12,"parentId":1,"tags":{},"startTime":1778883083256,"traceId":"9e490e16de2b9eed"},{"name":"run-turbopack","duration":5532470,"timestamp":75111019200,"id":14,"parentId":1,"tags":{},"startTime":1778883083265,"traceId":"9e490e16de2b9eed"},{"name":"turbopack-build-events","duration":72,"timestamp":75111314908,"id":15,"parentId":1,"tags":{},"startTime":1778883083561,"traceId":"9e490e16de2b9eed"},{"name":"run-typescript","duration":8587907,"timestamp":75116571288,"id":16,"parentId":1,"tags":{},"startTime":1778883088818,"traceId":"9e490e16de2b9eed"},{"name":"generate-required-server-files","duration":2415,"timestamp":75125160387,"id":18,"parentId":1,"tags":{},"startTime":1778883097407,"traceId":"9e490e16de2b9eed"},{"name":"check-static-error-page","duration":14796,"timestamp":75125328935,"id":20,"parentId":19,"tags":{},"startTime":1778883097575,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":425621,"timestamp":75125346682,"id":63,"parentId":22,"tags":{},"startTime":1778883097593,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":440370,"timestamp":75125332097,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778883097578,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":500390,"timestamp":75125346305,"id":62,"parentId":21,"tags":{},"startTime":1778883097593,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":516282,"timestamp":75125330528,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778883097577,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":503278,"timestamp":75125347284,"id":67,"parentId":28,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":515068,"timestamp":75125335583,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778883097582,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":509745,"timestamp":75125347786,"id":71,"parentId":33,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":521171,"timestamp":75125336414,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778883097583,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":518301,"timestamp":75125347048,"id":66,"parentId":27,"tags":{},"startTime":1778883097593,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":529953,"timestamp":75125335453,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778883097582,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":522619,"timestamp":75125347908,"id":73,"parentId":35,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":533931,"timestamp":75125336648,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778883097583,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":533345,"timestamp":75125347873,"id":72,"parentId":34,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":544758,"timestamp":75125336522,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778883097583,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":534850,"timestamp":75125346923,"id":65,"parentId":26,"tags":{},"startTime":1778883097593,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":546527,"timestamp":75125335308,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778883097582,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":538557,"timestamp":75125348076,"id":76,"parentId":38,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":549219,"timestamp":75125337468,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":540304,"timestamp":75125346809,"id":64,"parentId":25,"tags":{},"startTime":1778883097593,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":552030,"timestamp":75125335131,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778883097581,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":540018,"timestamp":75125347423,"id":68,"parentId":29,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":551772,"timestamp":75125335706,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778883097582,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":541748,"timestamp":75125348062,"id":75,"parentId":37,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":553381,"timestamp":75125337325,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":543379,"timestamp":75125347556,"id":69,"parentId":30,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":555105,"timestamp":75125335872,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778883097582,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":546113,"timestamp":75125348097,"id":78,"parentId":40,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":556519,"timestamp":75125337729,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":547669,"timestamp":75125348032,"id":74,"parentId":36,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":558602,"timestamp":75125337137,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778883097583,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":559098,"timestamp":75125348117,"id":80,"parentId":42,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":577543,"timestamp":75125337947,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":566141,"timestamp":75125349549,"id":84,"parentId":46,"tags":{},"startTime":1778883097596,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":577353,"timestamp":75125338390,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778883097585,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":567784,"timestamp":75125348107,"id":79,"parentId":41,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":578082,"timestamp":75125337840,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":570358,"timestamp":75125348086,"id":77,"parentId":39,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":580901,"timestamp":75125337590,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":575935,"timestamp":75125349506,"id":81,"parentId":43,"tags":{},"startTime":1778883097596,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":587481,"timestamp":75125338074,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":576346,"timestamp":75125349539,"id":83,"parentId":45,"tags":{},"startTime":1778883097596,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":587697,"timestamp":75125338295,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778883097585,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":578859,"timestamp":75125349525,"id":82,"parentId":44,"tags":{},"startTime":1778883097596,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":590255,"timestamp":75125338178,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778883097584,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":584310,"timestamp":75125349590,"id":86,"parentId":48,"tags":{},"startTime":1778883097596,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":595335,"timestamp":75125338621,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778883097585,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":584610,"timestamp":75125349567,"id":85,"parentId":47,"tags":{},"startTime":1778883097596,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":595696,"timestamp":75125338523,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778883097585,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":593561,"timestamp":75125347725,"id":70,"parentId":32,"tags":{},"startTime":1778883097594,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":605050,"timestamp":75125336287,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778883097583,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":585060,"timestamp":75125356432,"id":89,"parentId":31,"tags":{},"startTime":1778883097603,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":605530,"timestamp":75125335997,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778883097582,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":592062,"timestamp":75125349601,"id":87,"parentId":49,"tags":{},"startTime":1778883097596,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":602976,"timestamp":75125338722,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778883097585,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":591285,"timestamp":75125358730,"id":93,"parentId":52,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":608962,"timestamp":75125341098,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778883097587,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":599323,"timestamp":75125358763,"id":96,"parentId":56,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":615779,"timestamp":75125342363,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778883097589,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":606554,"timestamp":75125353144,"id":88,"parentId":24,"tags":{},"startTime":1778883097599,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":627133,"timestamp":75125332612,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778883097579,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":605712,"timestamp":75125358774,"id":97,"parentId":57,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":621952,"timestamp":75125342572,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778883097589,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":619107,"timestamp":75125358807,"id":99,"parentId":60,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":634628,"timestamp":75125343346,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778883097590,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":629257,"timestamp":75125358821,"id":100,"parentId":61,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":644660,"timestamp":75125343491,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778883097590,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":623168,"timestamp":75125369540,"id":101,"parentId":58,"tags":{},"startTime":1778883097616,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":650008,"timestamp":75125342749,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778883097589,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":637773,"timestamp":75125358718,"id":92,"parentId":51,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":655645,"timestamp":75125340894,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778883097587,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":638290,"timestamp":75125358704,"id":91,"parentId":50,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":656440,"timestamp":75125340627,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778883097587,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":639152,"timestamp":75125358739,"id":94,"parentId":53,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":656613,"timestamp":75125341316,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778883097588,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":618517,"timestamp":75125381356,"id":102,"parentId":55,"tags":{},"startTime":1778883097628,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":658155,"timestamp":75125341753,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778883097588,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":645088,"timestamp":75125358682,"id":90,"parentId":23,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":671464,"timestamp":75125332371,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778883097579,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":653695,"timestamp":75125358752,"id":95,"parentId":54,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":670980,"timestamp":75125341516,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778883097588,"traceId":"9e490e16de2b9eed"},{"name":"is-page-static","duration":653800,"timestamp":75125358781,"id":98,"parentId":59,"tags":{},"startTime":1778883097605,"traceId":"9e490e16de2b9eed"},{"name":"check-page","duration":669407,"timestamp":75125343201,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778883097589,"traceId":"9e490e16de2b9eed"},{"name":"static-check","duration":684878,"timestamp":75125327781,"id":19,"parentId":1,"tags":{},"startTime":1778883097574,"traceId":"9e490e16de2b9eed"},{"name":"write-routes-manifest","duration":556,"timestamp":75126021065,"id":104,"parentId":1,"tags":{},"startTime":1778883098267,"traceId":"9e490e16de2b9eed"},{"name":"load-dotenv","duration":56,"timestamp":75126032721,"id":107,"parentId":106,"tags":{},"startTime":1778883098279,"traceId":"9e490e16de2b9eed"},{"name":"run-export-path-map","duration":635,"timestamp":75126035571,"id":108,"parentId":106,"tags":{},"startTime":1778883098282,"traceId":"9e490e16de2b9eed"},{"name":"next-export","duration":529461,"timestamp":75126031470,"id":106,"parentId":1,"tags":{},"startTime":1778883098278,"traceId":"9e490e16de2b9eed"}]
2
- [{"name":"move-exported-app-not-found-","duration":1985,"timestamp":75126564201,"id":109,"parentId":105,"tags":{},"startTime":1778883098810,"traceId":"9e490e16de2b9eed"},{"name":"move-exported-app-global-error-","duration":903,"timestamp":75126566275,"id":110,"parentId":105,"tags":{},"startTime":1778883098813,"traceId":"9e490e16de2b9eed"},{"name":"static-generation","duration":543313,"timestamp":75126025649,"id":105,"parentId":1,"tags":{},"startTime":1778883098272,"traceId":"9e490e16de2b9eed"},{"name":"write-routes-manifest","duration":392,"timestamp":75126569152,"id":111,"parentId":1,"tags":{},"startTime":1778883098815,"traceId":"9e490e16de2b9eed"},{"name":"print-tree-view","duration":3881,"timestamp":75126583714,"id":112,"parentId":1,"tags":{},"startTime":1778883098830,"traceId":"9e490e16de2b9eed"},{"name":"write-route-bundle-stats","duration":12918,"timestamp":75126587630,"id":113,"parentId":1,"tags":{},"startTime":1778883098834,"traceId":"9e490e16de2b9eed"},{"name":"telemetry-flush","duration":26853,"timestamp":75126600572,"id":114,"parentId":1,"tags":{},"startTime":1778883098847,"traceId":"9e490e16de2b9eed"},{"name":"next-build","duration":15797550,"timestamp":75110829900,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778883083076,"traceId":"9e490e16de2b9eed"}]
1
+ [{"name":"generate-buildid","duration":268,"timestamp":75792545060,"id":4,"parentId":1,"tags":{},"startTime":1778883764791,"traceId":"ad1e3dae4285c394"},{"name":"load-custom-routes","duration":553,"timestamp":75792545473,"id":5,"parentId":1,"tags":{},"startTime":1778883764792,"traceId":"ad1e3dae4285c394"},{"name":"create-dist-dir","duration":597,"timestamp":75792546073,"id":6,"parentId":1,"tags":{},"startTime":1778883764792,"traceId":"ad1e3dae4285c394"},{"name":"clean","duration":446,"timestamp":75792547313,"id":7,"parentId":1,"tags":{},"startTime":1778883764794,"traceId":"ad1e3dae4285c394"},{"name":"discover-routes","duration":8437,"timestamp":75792629731,"id":8,"parentId":1,"tags":{},"startTime":1778883764876,"traceId":"ad1e3dae4285c394"},{"name":"create-root-mapping","duration":95,"timestamp":75792638223,"id":9,"parentId":1,"tags":{},"startTime":1778883764885,"traceId":"ad1e3dae4285c394"},{"name":"generate-route-types","duration":31061,"timestamp":75792640528,"id":10,"parentId":1,"tags":{},"startTime":1778883764887,"traceId":"ad1e3dae4285c394"},{"name":"public-dir-conflict-check","duration":107,"timestamp":75792671741,"id":11,"parentId":1,"tags":{},"startTime":1778883764918,"traceId":"ad1e3dae4285c394"},{"name":"generate-routes-manifest","duration":4581,"timestamp":75792671958,"id":12,"parentId":1,"tags":{},"startTime":1778883764918,"traceId":"ad1e3dae4285c394"},{"name":"run-turbopack","duration":5438344,"timestamp":75792681371,"id":14,"parentId":1,"tags":{},"startTime":1778883764928,"traceId":"ad1e3dae4285c394"},{"name":"turbopack-build-events","duration":103,"timestamp":75792968622,"id":15,"parentId":1,"tags":{},"startTime":1778883765215,"traceId":"ad1e3dae4285c394"},{"name":"run-typescript","duration":8525931,"timestamp":75798130290,"id":16,"parentId":1,"tags":{},"startTime":1778883770377,"traceId":"ad1e3dae4285c394"},{"name":"generate-required-server-files","duration":3073,"timestamp":75806657602,"id":18,"parentId":1,"tags":{},"startTime":1778883778904,"traceId":"ad1e3dae4285c394"},{"name":"check-static-error-page","duration":16138,"timestamp":75806839163,"id":20,"parentId":19,"tags":{},"startTime":1778883779085,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":370190,"timestamp":75806857367,"id":63,"parentId":22,"tags":{},"startTime":1778883779104,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":385325,"timestamp":75806842395,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778883779089,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":505405,"timestamp":75806859583,"id":69,"parentId":30,"tags":{},"startTime":1778883779106,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":518721,"timestamp":75806846401,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778883779093,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":511527,"timestamp":75806859794,"id":70,"parentId":32,"tags":{},"startTime":1778883779106,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":524513,"timestamp":75806846885,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778883779093,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":515195,"timestamp":75806859873,"id":71,"parentId":33,"tags":{},"startTime":1778883779106,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":528084,"timestamp":75806847066,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778883779093,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":520204,"timestamp":75806859955,"id":72,"parentId":34,"tags":{},"startTime":1778883779106,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":532998,"timestamp":75806847218,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778883779093,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":525982,"timestamp":75806859993,"id":73,"parentId":35,"tags":{},"startTime":1778883779106,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":538674,"timestamp":75806847375,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778883779094,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":526829,"timestamp":75806863477,"id":74,"parentId":36,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":542489,"timestamp":75806847892,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778883779094,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":530141,"timestamp":75806863526,"id":75,"parentId":37,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":545612,"timestamp":75806848108,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778883779094,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":538002,"timestamp":75806857531,"id":65,"parentId":26,"tags":{},"startTime":1778883779104,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":549818,"timestamp":75806845777,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778883779092,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":533557,"timestamp":75806863548,"id":76,"parentId":38,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":548889,"timestamp":75806848271,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":538685,"timestamp":75806863571,"id":78,"parentId":40,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":553792,"timestamp":75806848512,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":547059,"timestamp":75806857916,"id":67,"parentId":28,"tags":{},"startTime":1778883779104,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":558956,"timestamp":75806846080,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778883779092,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":550484,"timestamp":75806857451,"id":64,"parentId":25,"tags":{},"startTime":1778883779104,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":562393,"timestamp":75806845584,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778883779092,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":544569,"timestamp":75806863583,"id":79,"parentId":41,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":559554,"timestamp":75806848627,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":554243,"timestamp":75806857634,"id":66,"parentId":27,"tags":{},"startTime":1778883779104,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":565994,"timestamp":75806845921,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778883779092,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":558072,"timestamp":75806858093,"id":68,"parentId":29,"tags":{},"startTime":1778883779104,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":569980,"timestamp":75806846229,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778883779093,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":553750,"timestamp":75806863619,"id":82,"parentId":44,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":568407,"timestamp":75806849019,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":561581,"timestamp":75806857080,"id":62,"parentId":21,"tags":{},"startTime":1778883779103,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":577947,"timestamp":75806840761,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778883779087,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":557170,"timestamp":75806863558,"id":77,"parentId":39,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":572396,"timestamp":75806848395,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":561415,"timestamp":75806863652,"id":85,"parentId":47,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":575720,"timestamp":75806849398,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778883779096,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":561630,"timestamp":75806863640,"id":84,"parentId":46,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":576053,"timestamp":75806849248,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778883779096,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":559990,"timestamp":75806866935,"id":88,"parentId":24,"tags":{},"startTime":1778883779113,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":584006,"timestamp":75806842962,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778883779089,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":565543,"timestamp":75806863596,"id":80,"parentId":42,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":580441,"timestamp":75806848747,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":569015,"timestamp":75806863678,"id":87,"parentId":49,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":581218,"timestamp":75806851529,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778883779098,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":567771,"timestamp":75806872166,"id":89,"parentId":31,"tags":{},"startTime":1778883779118,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":593426,"timestamp":75806846551,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778883779093,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":586613,"timestamp":75806863606,"id":81,"parentId":43,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":601385,"timestamp":75806848882,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":620077,"timestamp":75806863664,"id":86,"parentId":48,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":634309,"timestamp":75806849521,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778883779096,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":623695,"timestamp":75806874546,"id":92,"parentId":51,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":646112,"timestamp":75806852218,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778883779098,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":635288,"timestamp":75806863631,"id":83,"parentId":45,"tags":{},"startTime":1778883779110,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":649843,"timestamp":75806849137,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778883779095,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":629323,"timestamp":75806874584,"id":95,"parentId":54,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":651091,"timestamp":75806852866,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778883779099,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":632483,"timestamp":75806874593,"id":96,"parentId":56,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":653374,"timestamp":75806853750,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778883779100,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":637340,"timestamp":75806874559,"id":93,"parentId":52,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":659541,"timestamp":75806852403,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778883779099,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":637507,"timestamp":75806874618,"id":98,"parentId":59,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":657540,"timestamp":75806854643,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778883779101,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":639558,"timestamp":75806874504,"id":90,"parentId":23,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":671412,"timestamp":75806842691,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778883779089,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":645698,"timestamp":75806874650,"id":100,"parentId":61,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":665365,"timestamp":75806855028,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778883779101,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":597452,"timestamp":75806924193,"id":102,"parentId":58,"tags":{},"startTime":1778883779170,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":667478,"timestamp":75806854214,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778883779100,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":652213,"timestamp":75806874632,"id":99,"parentId":60,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":672081,"timestamp":75806854818,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778883779101,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":619925,"timestamp":75806907310,"id":101,"parentId":55,"tags":{},"startTime":1778883779154,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":674121,"timestamp":75806853156,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778883779099,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":653718,"timestamp":75806874534,"id":91,"parentId":50,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":676273,"timestamp":75806852025,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778883779098,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":659163,"timestamp":75806874572,"id":94,"parentId":53,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":681164,"timestamp":75806852624,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778883779099,"traceId":"ad1e3dae4285c394"},{"name":"is-page-static","duration":672124,"timestamp":75806874606,"id":97,"parentId":57,"tags":{},"startTime":1778883779121,"traceId":"ad1e3dae4285c394"},{"name":"check-page","duration":692804,"timestamp":75806853987,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778883779100,"traceId":"ad1e3dae4285c394"},{"name":"static-check","duration":708858,"timestamp":75806837979,"id":19,"parentId":1,"tags":{},"startTime":1778883779084,"traceId":"ad1e3dae4285c394"},{"name":"write-routes-manifest","duration":505,"timestamp":75807554630,"id":104,"parentId":1,"tags":{},"startTime":1778883779801,"traceId":"ad1e3dae4285c394"},{"name":"load-dotenv","duration":55,"timestamp":75807569942,"id":107,"parentId":106,"tags":{},"startTime":1778883779816,"traceId":"ad1e3dae4285c394"},{"name":"run-export-path-map","duration":696,"timestamp":75807572898,"id":108,"parentId":106,"tags":{},"startTime":1778883779819,"traceId":"ad1e3dae4285c394"},{"name":"next-export","duration":548301,"timestamp":75807568247,"id":106,"parentId":1,"tags":{},"startTime":1778883779815,"traceId":"ad1e3dae4285c394"}]
2
+ [{"name":"move-exported-app-not-found-","duration":1729,"timestamp":75808119807,"id":109,"parentId":105,"tags":{},"startTime":1778883780366,"traceId":"ad1e3dae4285c394"},{"name":"move-exported-app-global-error-","duration":951,"timestamp":75808121621,"id":110,"parentId":105,"tags":{},"startTime":1778883780368,"traceId":"ad1e3dae4285c394"},{"name":"static-generation","duration":564036,"timestamp":75807560246,"id":105,"parentId":1,"tags":{},"startTime":1778883779807,"traceId":"ad1e3dae4285c394"},{"name":"write-routes-manifest","duration":373,"timestamp":75808124437,"id":111,"parentId":1,"tags":{},"startTime":1778883780371,"traceId":"ad1e3dae4285c394"},{"name":"print-tree-view","duration":4393,"timestamp":75808134924,"id":112,"parentId":1,"tags":{},"startTime":1778883780381,"traceId":"ad1e3dae4285c394"},{"name":"write-route-bundle-stats","duration":13541,"timestamp":75808139347,"id":113,"parentId":1,"tags":{},"startTime":1778883780386,"traceId":"ad1e3dae4285c394"},{"name":"telemetry-flush","duration":35905,"timestamp":75808152912,"id":114,"parentId":1,"tags":{},"startTime":1778883780399,"traceId":"ad1e3dae4285c394"},{"name":"next-build","duration":15694925,"timestamp":75792493915,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778883764740,"traceId":"ad1e3dae4285c394"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5532470,"timestamp":75111019200,"id":14,"parentId":1,"tags":{},"startTime":1778883083265,"traceId":"9e490e16de2b9eed"},{"name":"turbopack-build-events","duration":72,"timestamp":75111314908,"id":15,"parentId":1,"tags":{},"startTime":1778883083561,"traceId":"9e490e16de2b9eed"},{"name":"run-typescript","duration":8587907,"timestamp":75116571288,"id":16,"parentId":1,"tags":{},"startTime":1778883088818,"traceId":"9e490e16de2b9eed"},{"name":"static-check","duration":684878,"timestamp":75125327781,"id":19,"parentId":1,"tags":{},"startTime":1778883097574,"traceId":"9e490e16de2b9eed"},{"name":"static-generation","duration":543313,"timestamp":75126025649,"id":105,"parentId":1,"tags":{},"startTime":1778883098272,"traceId":"9e490e16de2b9eed"},{"name":"telemetry-flush","duration":26853,"timestamp":75126600572,"id":114,"parentId":1,"tags":{},"startTime":1778883098847,"traceId":"9e490e16de2b9eed"},{"name":"next-build","duration":15797550,"timestamp":75110829900,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778883083076,"traceId":"9e490e16de2b9eed"}]
1
+ [{"name":"run-turbopack","duration":5438344,"timestamp":75792681371,"id":14,"parentId":1,"tags":{},"startTime":1778883764928,"traceId":"ad1e3dae4285c394"},{"name":"turbopack-build-events","duration":103,"timestamp":75792968622,"id":15,"parentId":1,"tags":{},"startTime":1778883765215,"traceId":"ad1e3dae4285c394"},{"name":"run-typescript","duration":8525931,"timestamp":75798130290,"id":16,"parentId":1,"tags":{},"startTime":1778883770377,"traceId":"ad1e3dae4285c394"},{"name":"static-check","duration":708858,"timestamp":75806837979,"id":19,"parentId":1,"tags":{},"startTime":1778883779084,"traceId":"ad1e3dae4285c394"},{"name":"static-generation","duration":564036,"timestamp":75807560246,"id":105,"parentId":1,"tags":{},"startTime":1778883779807,"traceId":"ad1e3dae4285c394"},{"name":"telemetry-flush","duration":35905,"timestamp":75808152912,"id":114,"parentId":1,"tags":{},"startTime":1778883780399,"traceId":"ad1e3dae4285c394"},{"name":"next-build","duration":15694925,"timestamp":75792493915,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778883764740,"traceId":"ad1e3dae4285c394"}]
@@ -1502,7 +1502,21 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1502
1502
  return (
1503
1503
  <>
1504
1504
  <span
1505
- className="px-2.5 py-1 rounded-md bg-green-500/10 text-green-300 border border-green-500/20 anet-topo-chip-focus"
1505
+ // Round 201 / Loop: the working chip joins the
1506
+ // "chip's hover state deepens its OWN identity colour"
1507
+ // family that R193 opened (active-links chip) and R195
1508
+ // extended (recent-panel footer). Pre-R201 hovering the
1509
+ // working chip fired R55 canvas dim + chip-row highlight
1510
+ // but the chip itself stayed at bg-green-500/10 — cause
1511
+ // silent, effect loud. R201 deepens its OWN green hue
1512
+ // (10→15 bg, 20→30 border) only when clickable.
1513
+ // transition-colors duration-200 blends the swap to
1514
+ // match R193's timing on the active-links chip.
1515
+ className={`px-2.5 py-1 rounded-md border anet-topo-chip-focus transition-colors duration-200 ${
1516
+ workingCount > 0
1517
+ ? 'bg-green-500/10 text-green-300 border-green-500/20 hover:bg-green-500/15 hover:border-green-500/30'
1518
+ : 'bg-green-500/10 text-green-300 border-green-500/20'
1519
+ }`}
1506
1520
  data-working-chip
1507
1521
  data-working-chip-aliases={workingAliases.join(',')}
1508
1522
  data-pin-mirror={pinnedStatus === 'working' ? 'true' : 'false'}
@@ -1518,10 +1532,16 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1518
1532
  // (working / online / vendor letter). The visual is small
1519
1533
  // — a 1-2 px inset double ring — but the eye catches the
1520
1534
  // pop on every pin/unpin without the ease.
1535
+ // Round 201 / Loop: inline transition list now also covers
1536
+ // background-color + border-color so the R201 hover tint
1537
+ // eases. Tailwind transition-colors on the className would
1538
+ // be overridden by this inline declaration, so we splice
1539
+ // the colour properties directly into the existing
1540
+ // R180 box-shadow transition.
1521
1541
  style={{
1522
1542
  cursor: workingCount > 0 ? 'pointer' : undefined,
1523
1543
  boxShadow: pinnedStatus === 'working' ? 'inset 0 0 0 1px #4ade80, inset 0 0 0 2px rgba(255,255,255,0.45)' : undefined,
1524
- transition: 'box-shadow 150ms ease-out',
1544
+ transition: 'box-shadow 150ms ease-out, background-color 200ms ease-out, border-color 200ms ease-out',
1525
1545
  }}
1526
1546
  onMouseEnter={() => { if (workingCount > 0) setHoveredStatus('working'); }}
1527
1547
  onMouseLeave={() => setHoveredStatus(prev => prev === 'working' ? null : prev)}
@@ -1548,7 +1568,19 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1548
1568
  {workingCount} working
1549
1569
  </span>
1550
1570
  <span
1551
- className="px-2.5 py-1 rounded-md bg-cyan-500/10 text-cyan-300 border border-cyan-500/20 anet-topo-chip-focus"
1571
+ // Round 201 / Loop: online chip — mirror of the working
1572
+ // chip treatment above. cyan hue 10→15 bg + 20→30 border
1573
+ // on hover, only when there's at least one online node
1574
+ // to highlight. Three sibling chips in the chip row now
1575
+ // all speak the same gesture vocabulary:
1576
+ // working chip · green 10→15 (R201)
1577
+ // online chip · cyan 10→15 (R201)
1578
+ // active-links · gray → cyan (R193)
1579
+ className={`px-2.5 py-1 rounded-md border anet-topo-chip-focus transition-colors duration-200 ${
1580
+ onlineNodes.length > 0
1581
+ ? 'bg-cyan-500/10 text-cyan-300 border-cyan-500/20 hover:bg-cyan-500/15 hover:border-cyan-500/30'
1582
+ : 'bg-cyan-500/10 text-cyan-300 border-cyan-500/20'
1583
+ }`}
1552
1584
  data-online-chip
1553
1585
  data-online-chip-aliases={onlineAliases.join(',')}
1554
1586
  data-pin-mirror={pinnedStatus === 'idle' ? 'true' : 'false'}
@@ -1557,10 +1589,12 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1557
1589
  role={onlineNodes.length > 0 ? 'link' : undefined}
1558
1590
  tabIndex={onlineNodes.length > 0 ? 0 : undefined}
1559
1591
  // R180: smooth-pin-mirror family — see working chip above.
1592
+ // R201: inline transition list also covers bg + border so
1593
+ // the new R201 hover tint eases (mirror of working chip).
1560
1594
  style={{
1561
1595
  cursor: onlineNodes.length > 0 ? 'pointer' : undefined,
1562
1596
  boxShadow: pinnedStatus === 'idle' ? 'inset 0 0 0 1px #67e8f9, inset 0 0 0 2px rgba(255,255,255,0.45)' : undefined,
1563
- transition: 'box-shadow 150ms ease-out',
1597
+ transition: 'box-shadow 150ms ease-out, background-color 200ms ease-out, border-color 200ms ease-out',
1564
1598
  }}
1565
1599
  onMouseEnter={() => {
1566
1600
  // If a working filter would isolate nothing, route to idle.
@@ -2055,15 +2089,37 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2055
2089
  className="inline-flex items-baseline gap-0.5 px-1 rounded anet-topo-chip-focus"
2056
2090
  data-vendor-letter={v.initial}
2057
2091
  data-vendor-pinned={isPinned ? 'true' : 'false'}
2092
+ data-vendor-hovered={hoveredVendor === v.initial ? 'true' : 'false'}
2058
2093
  data-vendor-aliases={aliases.join(',')}
2059
2094
  title={tooltip}
2060
2095
  // R180: smooth-pin-mirror family — see working chip above.
2096
+ // Round 202 / Loop: vendor letter chip joins the "hover
2097
+ // deepens own identity hue" family R193/R195/R201 built
2098
+ // up across the rest of the chip row. Pre-R202 hovering
2099
+ // a vendor letter (A/C/G/K/书/?) fired R88 canvas dim
2100
+ // via setHoveredVendor, but the chip itself stayed at
2101
+ // bg=transparent — cause silent, effect loud. R202
2102
+ // tints the chip with its OWN vendor colour at 12%
2103
+ // alpha via color-mix() so each vendor's chip lights
2104
+ // up in its own hue (Anthropic green / OpenAI cyan /
2105
+ // 书 blue / ?). No layout shift: only background-color
2106
+ // changes, no border/padding swap. transition list
2107
+ // extends the existing R180 box-shadow 150ms with
2108
+ // background-color 200ms ease-out (same splice idiom
2109
+ // R201 used on the working/online chips). color-mix()
2110
+ // is supported Chrome ≥ 111 / Safari ≥ 16.2 / FF ≥ 113;
2111
+ // for older browsers the chip falls back to its idle
2112
+ // transparent bg (graceful degradation — the canvas-
2113
+ // dim effect still fires regardless).
2061
2114
  style={{
2062
2115
  cursor: 'pointer',
2116
+ backgroundColor: (hoveredVendor === v.initial && !isPinned)
2117
+ ? `color-mix(in srgb, ${v.color} 12%, transparent)`
2118
+ : 'transparent',
2063
2119
  boxShadow: isPinned
2064
2120
  ? `inset 0 0 0 1px ${v.color}, inset 0 0 0 2px rgba(255,255,255,0.45)`
2065
2121
  : undefined,
2066
- transition: 'box-shadow 150ms ease-out',
2122
+ transition: 'box-shadow 150ms ease-out, background-color 200ms ease-out',
2067
2123
  }}
2068
2124
  onMouseEnter={() => setHoveredVendor(v.initial)}
2069
2125
  onMouseLeave={() => setHoveredVendor(prev => prev === v.initial ? null : prev)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.4.6-preview.207",
3
+ "version": "0.4.6-preview.209",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,177 @@
1
+ /* Round 201 verification: the chip-row "N working" / "N online" chips
2
+ * adopt deeper versions of their own identity colour on hover,
3
+ * mirroring R193 active-links chip pattern.
4
+ *
5
+ * Pre-R201 hover working chip → R55 canvas dim + chip-row highlight,
6
+ * but chip itself stayed at bg-{color}-500/10 — cause silent, effect
7
+ * loud. R201 deepens 10→15 bg and 20→30 border on hover (only when
8
+ * the chip has a target count > 0). The inline transition list is
9
+ * extended to cover background-color + border-color so the swap
10
+ * eases instead of snapping (Tailwind transition-colors on the
11
+ * className alone would be overridden by the existing R180 inline
12
+ * box-shadow transition).
13
+ *
14
+ * Test (cyber dark, 4 working sessions):
15
+ * 1. Working chip: clickable='true', className has hover:bg-green-500/15
16
+ * + hover:border-green-500/30, transition includes 'background-color'
17
+ * + 'border-color' (both 200ms), inline still has 'box-shadow 150ms'.
18
+ * 2. Online chip: same shape with cyan hue.
19
+ * 3. Hover the working chip — wait past 220ms → computed bg
20
+ * shifts to a more-saturated/darker green (RGB-or-OKLab signal).
21
+ * 4. Move away — bg returns to idle (with margin past 220ms).
22
+ * 5. The chip's R55 canvas-effect setHoveredStatus still fires —
23
+ * verified via hoveredStatus change reflected on the working
24
+ * legend row's data-legend-row-lifted attribute.
25
+ */
26
+ import { chromium } from 'playwright';
27
+ import { readFileSync } from 'node:fs';
28
+
29
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
30
+ const browser = await chromium.launch({ headless: true });
31
+
32
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
33
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
34
+ await ctx.addInitScript(() => {
35
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
36
+ });
37
+
38
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
39
+ await ctx.route('**/api/hub/status*', async (route) => {
40
+ const r = await route.fetch();
41
+ const b = await r.json();
42
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
43
+ const mk = (alias) => ({
44
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'cli-claude-code',
45
+ network_id: nid, project_dir: null,
46
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
47
+ });
48
+ await route.fulfill({ response: r, json: { ...b, sessions: [
49
+ mk('alpha'), mk('beta'), mk('gamma'), mk('delta'),
50
+ ] } });
51
+ });
52
+ await ctx.route('**/api/hub/messages*', (route) => route.fulfill({ json: { messages: [] } }));
53
+ await ctx.route('**/api/hub/tasks*', (route) => route.fulfill({ json: { tasks: [] } }));
54
+
55
+ const page = await ctx.newPage();
56
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
57
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
58
+ await page.waitForSelector('[data-working-chip]', { timeout: 10000 });
59
+ await page.waitForTimeout(300);
60
+
61
+ const probeChip = async (selector) => page.evaluate((sel) => {
62
+ const el = document.querySelector(sel);
63
+ if (!el) return null;
64
+ const cs = getComputedStyle(el);
65
+ return {
66
+ className: el.getAttribute('class') || '',
67
+ clickable: el.getAttribute('data-working-chip-clickable') ||
68
+ el.getAttribute('data-online-chip-clickable'),
69
+ bg: cs.backgroundColor,
70
+ borderColor: cs.borderTopColor,
71
+ transition: el.style.transition,
72
+ };
73
+ }, selector);
74
+
75
+ const idleWorking = await probeChip('[data-working-chip]');
76
+ const idleOnline = await probeChip('[data-online-chip]');
77
+
78
+ await page.hover('[data-working-chip]');
79
+ await page.waitForTimeout(250);
80
+ const hoverWorking = await probeChip('[data-working-chip]');
81
+
82
+ // Confirm R55 canvas effect still fires — hoveredStatus='working'
83
+ // lifts the legend working row.
84
+ const workingRowLifted = await page.evaluate(() =>
85
+ document.querySelector('[data-legend-status="working"]')
86
+ ?.getAttribute('data-legend-row-lifted'));
87
+
88
+ await page.mouse.move(0, 0);
89
+ await page.waitForTimeout(280);
90
+ const settledWorking = await probeChip('[data-working-chip]');
91
+
92
+ await page.hover('[data-online-chip]');
93
+ await page.waitForTimeout(250);
94
+ const hoverOnline = await probeChip('[data-online-chip]');
95
+
96
+ await page.mouse.move(0, 0);
97
+ await page.waitForTimeout(280);
98
+ const settledOnline = await probeChip('[data-online-chip]');
99
+
100
+ await browser.close();
101
+
102
+ // Tailwind 4 emits oklab/oklch / color-mix forms. Just check the bg
103
+ // string actually differs idle vs hover, and a brief parser confirms
104
+ // the channel that should grow (green for working, blue/green for cyan).
105
+ // Parse colors including alpha. R201's Tailwind /10 → /15 emits same
106
+ // OKLab L/a/b with stepped-up alpha (0.1 → 0.15); R193's gray→cyan
107
+ // pattern emits a different hue at any alpha. Both are "more saturated
108
+ // against the canvas" from the user's POV. Capture alpha and treat
109
+ // alpha-increase as a valid saturation signal alongside chroma growth.
110
+ function parseColor(s) {
111
+ if (!s) return null;
112
+ let m = s.match(/rgba?\(\s*(\d+)\s*,?\s*(\d+)\s*,?\s*(\d+)(?:\s*[,/]\s*([\d.]+))?/);
113
+ if (m) return { kind: 'rgb', r: +m[1], g: +m[2], b: +m[3], a: m[4] != null ? +m[4] : 1 };
114
+ m = s.match(/oklab\(\s*([\-\d.]+)\s+([\-\d.]+)\s+([\-\d.]+)(?:\s*\/\s*([\d.]+))?/);
115
+ if (m) return { kind: 'oklab', L: +m[1], a: +m[2], b: +m[3], alpha: m[4] != null ? +m[4] : 1 };
116
+ m = s.match(/oklch\(\s*([\-\d.]+)\s+([\-\d.]+)\s+([\-\d.]+)(?:\s*\/\s*([\d.]+))?/);
117
+ if (m) return { kind: 'oklch', L: +m[1], C: +m[2], h: +m[3], alpha: m[4] != null ? +m[4] : 1 };
118
+ return null;
119
+ }
120
+
121
+ // "More saturated against the canvas" = either chroma/hue distance
122
+ // from gray grew OR alpha grew (Tailwind /10 → /15 deepens by alpha).
123
+ const moreSaturated = (idle, hov) => {
124
+ if (!idle || !hov) return false;
125
+ if (idle.kind === 'rgb' && hov.kind === 'rgb') {
126
+ const chromaIdle = Math.max(idle.r, idle.g, idle.b) - Math.min(idle.r, idle.g, idle.b);
127
+ const chromaHov = Math.max(hov.r, hov.g, hov.b) - Math.min(hov.r, hov.g, hov.b);
128
+ return chromaHov > chromaIdle || hov.a > idle.a + 0.01;
129
+ }
130
+ if (idle.kind === 'oklab' && hov.kind === 'oklab') {
131
+ const dIdle = Math.hypot(idle.a, idle.b);
132
+ const dHov = Math.hypot(hov.a, hov.b);
133
+ return dHov > dIdle + 0.005 || hov.alpha > idle.alpha + 0.01;
134
+ }
135
+ if (idle.kind === 'oklch' && hov.kind === 'oklch') {
136
+ return hov.C > idle.C + 0.005 || hov.alpha > idle.alpha + 0.01;
137
+ }
138
+ return false;
139
+ };
140
+
141
+ const idleWorkingC = parseColor(idleWorking?.bg);
142
+ const hoverWorkingC = parseColor(hoverWorking?.bg);
143
+ const idleOnlineC = parseColor(idleOnline?.bg);
144
+ const hoverOnlineC = parseColor(hoverOnline?.bg);
145
+
146
+ const results = {
147
+ working_clickable: idleWorking?.clickable === 'true',
148
+ working_className_has_hover: idleWorking?.className.includes('hover:bg-green-500/15')
149
+ && idleWorking?.className.includes('hover:border-green-500/30'),
150
+ working_transition_includes_bg: /background-color\s+(?:200ms|0\.2s)/.test(idleWorking?.transition || ''),
151
+ working_transition_includes_border: /border-color\s+(?:200ms|0\.2s)/.test(idleWorking?.transition || ''),
152
+ working_transition_keeps_boxshadow: /box-shadow\s+(?:150ms|0\.15s)/.test(idleWorking?.transition || ''),
153
+ working_hover_bg_changed: idleWorking?.bg !== hoverWorking?.bg,
154
+ working_hover_more_saturated: moreSaturated(idleWorkingC, hoverWorkingC),
155
+ working_settles_back: settledWorking?.bg === idleWorking?.bg,
156
+ // R55 canvas-effect still fires from the chip — hovering the
157
+ // working chip lifts the legend working row.
158
+ working_canvas_effect_fires: workingRowLifted === 'true',
159
+
160
+ online_clickable: idleOnline?.clickable === 'true',
161
+ online_className_has_hover: idleOnline?.className.includes('hover:bg-cyan-500/15')
162
+ && idleOnline?.className.includes('hover:border-cyan-500/30'),
163
+ online_transition_includes_bg: /background-color\s+(?:200ms|0\.2s)/.test(idleOnline?.transition || ''),
164
+ online_transition_includes_border: /border-color\s+(?:200ms|0\.2s)/.test(idleOnline?.transition || ''),
165
+ online_hover_bg_changed: idleOnline?.bg !== hoverOnline?.bg,
166
+ online_hover_more_saturated: moreSaturated(idleOnlineC, hoverOnlineC),
167
+ online_settles_back: settledOnline?.bg === idleOnline?.bg,
168
+ };
169
+ const ok = Object.values(results).every(Boolean);
170
+ console.log(`${ok ? '✅' : '❌'} status-bar chips self-hover:`, JSON.stringify(results),
171
+ `\n idleWorking:`, idleWorking,
172
+ `\n hoverWorking:`, hoverWorking,
173
+ `\n settledWorking:`, settledWorking,
174
+ `\n idleOnline:`, idleOnline,
175
+ `\n hoverOnline:`, hoverOnline,
176
+ `\n settledOnline:`, settledOnline);
177
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,130 @@
1
+ /* Round 202 verification: vendor letter chips (A/O/书/M/?) deepen
2
+ * their OWN vendor colour on hover, completing the chip-row family
3
+ * R193/R195/R201 opened.
4
+ *
5
+ * Pre-R202 hover fired R88 canvas dim via setHoveredVendor but the
6
+ * chip itself stayed at bg=transparent. R202 tints the chip with
7
+ * color-mix(in srgb, <vendor-hue> 12%, transparent) only when hovered
8
+ * (and not pinned — pinned uses R180's stronger inset-ring treatment).
9
+ *
10
+ * Test (cyber dark, 2 claude + 2 gpt sessions → vendorDist={A:2, O:2}):
11
+ * 1. vendor letter chips A + O both render (vendorDist.length > 1).
12
+ * 2. Idle: data-vendor-hovered='false', backgroundColor='transparent'
13
+ * / 'rgba(0,0,0,0)'.
14
+ * 3. Inline transition includes 'box-shadow 150ms' (R180 still there)
15
+ * AND 'background-color 200ms' (R202 splice).
16
+ * 4. Hover 'A' chip — wait past 220ms.
17
+ * 5. 'A' data-vendor-hovered='true', backgroundColor is a non-empty
18
+ * tint string (color-mix or rendered fallback) different from
19
+ * idle. 'O' chip stays 'false' + transparent.
20
+ * 6. Move away — 'A' settles back to 'false' + transparent.
21
+ * 7. R88 canvas-effect verification — hover 'A' sets hoveredVendor
22
+ * which composes into the canvas dim logic; we probe via a
23
+ * surrogate signal that the chip's R55-like effect fires:
24
+ * hoveredVendor is exposed elsewhere via data attributes; the
25
+ * simplest gate is that the chip itself reflects the hover via
26
+ * its own data-vendor-hovered attribute already asserted above
27
+ * (event handler clearly ran).
28
+ */
29
+ import { chromium } from 'playwright';
30
+ import { readFileSync } from 'node:fs';
31
+
32
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
33
+ const browser = await chromium.launch({ headless: true });
34
+
35
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
36
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
37
+ await ctx.addInitScript(() => {
38
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
39
+ });
40
+
41
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
42
+ await ctx.route('**/api/hub/status*', async (route) => {
43
+ const r = await route.fetch();
44
+ const b = await r.json();
45
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
46
+ const mk = (alias, model) => ({
47
+ alias, status: 'working', model, runtime: 'cli-claude-code',
48
+ network_id: nid, project_dir: null,
49
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
50
+ });
51
+ // Two Anthropic + two OpenAI → vendorDist={A:2, O:2}
52
+ await route.fulfill({ response: r, json: { ...b, sessions: [
53
+ mk('alpha', 'claude-opus-4'),
54
+ mk('beta', 'claude-sonnet-4'),
55
+ mk('gamma', 'gpt-4o'),
56
+ mk('delta', 'gpt-4'),
57
+ ] } });
58
+ });
59
+ await ctx.route('**/api/hub/messages*', (route) => route.fulfill({ json: { messages: [] } }));
60
+ await ctx.route('**/api/hub/tasks*', (route) => route.fulfill({ json: { tasks: [] } }));
61
+
62
+ const page = await ctx.newPage();
63
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
64
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
65
+ await page.waitForSelector('[data-vendor-letter="A"]', { timeout: 10000 });
66
+ await page.waitForSelector('[data-vendor-letter="O"]', { timeout: 5000 });
67
+ await page.waitForTimeout(300);
68
+
69
+ const probe = async (initial) => page.evaluate((i) => {
70
+ const el = document.querySelector(`[data-vendor-letter="${i}"]`);
71
+ if (!el) return null;
72
+ const cs = getComputedStyle(el);
73
+ return {
74
+ initial: i,
75
+ hovered: el.getAttribute('data-vendor-hovered'),
76
+ pinned: el.getAttribute('data-vendor-pinned'),
77
+ bg: cs.backgroundColor,
78
+ inlineBg: el.style.backgroundColor,
79
+ transition: el.style.transition,
80
+ };
81
+ }, initial);
82
+
83
+ const idleA = await probe('A');
84
+ const idleO = await probe('O');
85
+
86
+ await page.hover('[data-vendor-letter="A"]');
87
+ await page.waitForTimeout(260);
88
+ const hoverA = await probe('A');
89
+ const otherO = await probe('O');
90
+
91
+ await page.mouse.move(0, 0);
92
+ await page.waitForTimeout(280);
93
+ const settledA = await probe('A');
94
+
95
+ await browser.close();
96
+
97
+ const isTransparent = (s) =>
98
+ !s || s === 'transparent' || s === 'rgba(0, 0, 0, 0)' || s === 'rgba(0,0,0,0)';
99
+
100
+ const hasColorMix = (s) => /color-mix\s*\(/i.test(s || '');
101
+ const isNonEmptyColor = (s) => !!s && !isTransparent(s);
102
+
103
+ const results = {
104
+ A_chip_present: !!idleA,
105
+ O_chip_present: !!idleO,
106
+
107
+ idle_A_not_hovered: idleA?.hovered === 'false',
108
+ idle_A_transparent_bg: isTransparent(idleA?.bg),
109
+ idle_A_transition_boxshadow: /box-shadow\s+(?:150ms|0\.15s)/.test(idleA?.transition || ''),
110
+ idle_A_transition_bgcolor: /background-color\s+(?:200ms|0\.2s)/.test(idleA?.transition || ''),
111
+
112
+ idle_O_not_hovered: idleO?.hovered === 'false',
113
+
114
+ hover_A_hovered_attr: hoverA?.hovered === 'true',
115
+ hover_A_inline_color_mix: hasColorMix(hoverA?.inlineBg),
116
+ hover_A_computed_non_transparent: isNonEmptyColor(hoverA?.bg) && !isTransparent(hoverA?.bg),
117
+ hover_A_bg_changed: idleA?.bg !== hoverA?.bg,
118
+ hover_O_stays_idle: otherO?.hovered === 'false' && isTransparent(otherO?.bg),
119
+
120
+ settled_A_not_hovered: settledA?.hovered === 'false',
121
+ settled_A_transparent_bg: isTransparent(settledA?.bg),
122
+ };
123
+ const ok = Object.values(results).every(Boolean);
124
+ console.log(`${ok ? '✅' : '❌'} vendor chip self-hover:`, JSON.stringify(results),
125
+ `\n idleA:`, idleA,
126
+ `\n idleO:`, idleO,
127
+ `\n hoverA:`, hoverA,
128
+ `\n otherO:`, otherO,
129
+ `\n settledA:`, settledA);
130
+ process.exit(ok ? 0 : 1);