@sleep2agi/agent-network-dashboard 0.4.5-preview.86 → 0.4.5-preview.88

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 (178) 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 +17 -17
  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.html +1 -1
  14. package/.next/server/app/_not-found.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  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 +1 -1
  21. package/.next/server/app/admin.html +1 -1
  22. package/.next/server/app/admin.rsc +1 -1
  23. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  29. package/.next/server/app/index.html +2 -2
  30. package/.next/server/app/index.rsc +2 -2
  31. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/login.html +2 -2
  38. package/.next/server/app/login.rsc +2 -2
  39. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  40. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  45. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/logs.html +2 -2
  47. package/.next/server/app/logs.rsc +2 -2
  48. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  49. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  52. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  54. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/messages.html +2 -2
  56. package/.next/server/app/messages.rsc +2 -2
  57. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  58. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  61. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  63. package/.next/server/app/node.html +1 -1
  64. package/.next/server/app/node.rsc +1 -1
  65. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  68. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  70. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  71. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  72. package/.next/server/app/nodes.html +2 -2
  73. package/.next/server/app/nodes.rsc +2 -2
  74. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  75. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  76. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  77. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  80. package/.next/server/app/page_client-reference-manifest.js +1 -1
  81. package/.next/server/app/server-logs.html +1 -1
  82. package/.next/server/app/server-logs.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  85. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  86. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  87. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  90. package/.next/server/app/settings/networks.html +2 -2
  91. package/.next/server/app/settings/networks.rsc +2 -2
  92. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  93. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  94. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  95. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  96. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +2 -2
  97. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  98. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  99. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  100. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  101. package/.next/server/app/settings/tokens.html +2 -2
  102. package/.next/server/app/settings/tokens.rsc +2 -2
  103. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  104. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  105. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  106. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  107. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +2 -2
  108. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  109. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  110. package/.next/server/app/settings.html +2 -2
  111. package/.next/server/app/settings.rsc +2 -2
  112. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  113. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  114. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  115. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  116. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  117. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  118. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  119. package/.next/server/app/tasks.html +2 -2
  120. package/.next/server/app/tasks.rsc +2 -2
  121. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  122. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  123. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  124. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  125. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  127. package/.next/server/chunks/ssr/[root-of-the-server]__0jl4ukn._.js +1 -1
  128. package/.next/server/chunks/ssr/[root-of-the-server]__0jl4ukn._.js.map +1 -1
  129. package/.next/server/chunks/ssr/[root-of-the-server]__0w2ay2h._.js +1 -1
  130. package/.next/server/chunks/ssr/[root-of-the-server]__0w2ay2h._.js.map +1 -1
  131. package/.next/server/chunks/ssr/_0nne7mz._.js +1 -1
  132. package/.next/server/chunks/ssr/_0nne7mz._.js.map +1 -1
  133. package/.next/server/chunks/ssr/app_0.zbtn5._.js +1 -1
  134. package/.next/server/chunks/ssr/app_0.zbtn5._.js.map +1 -1
  135. package/.next/server/chunks/ssr/app_04n78pr._.js +1 -1
  136. package/.next/server/chunks/ssr/app_04n78pr._.js.map +1 -1
  137. package/.next/server/chunks/ssr/app_0_agk0r._.js +1 -1
  138. package/.next/server/chunks/ssr/app_0_agk0r._.js.map +1 -1
  139. package/.next/server/chunks/ssr/app_0aum_g5._.js +1 -1
  140. package/.next/server/chunks/ssr/app_0aum_g5._.js.map +1 -1
  141. package/.next/server/chunks/ssr/app_0emvkn2._.js +1 -1
  142. package/.next/server/chunks/ssr/app_0emvkn2._.js.map +1 -1
  143. package/.next/server/chunks/ssr/app_0esuljp._.js +1 -1
  144. package/.next/server/chunks/ssr/app_0esuljp._.js.map +1 -1
  145. package/.next/server/chunks/ssr/app_0izi28j._.js +1 -1
  146. package/.next/server/chunks/ssr/app_0izi28j._.js.map +1 -1
  147. package/.next/server/middleware-build-manifest.js +3 -3
  148. package/.next/server/pages/404.html +1 -1
  149. package/.next/server/pages/500.html +1 -1
  150. package/.next/server/server-reference-manifest.js +1 -1
  151. package/.next/server/server-reference-manifest.json +1 -1
  152. package/.next/static/chunks/{0ywwa79l.thf~.js → 02_zpo7taex9o.js} +2 -2
  153. package/.next/static/chunks/06n3d~fbbtagk.js +1 -0
  154. package/.next/static/chunks/07eba1lz2u3p4.js +1 -0
  155. package/.next/static/chunks/{0vijxg-39m8.p.js → 0at4zpeqlf-2l.js} +1 -1
  156. package/.next/static/chunks/0f.0umzj2p553.js +1 -0
  157. package/.next/static/chunks/{00q6q_ya207yu.js → 0f4e9qr_gjx8a.js} +1 -1
  158. package/.next/static/chunks/0g9aof0ob_fcj.js +1 -0
  159. package/.next/static/chunks/0ubqqhhpsaez4.js +1 -0
  160. package/.next/static/chunks/{0ogy2-45xvdjy.js → 12gprw3l0kvvf.js} +1 -1
  161. package/.next/static/chunks/12yuo353giomx.js +1 -0
  162. package/.next/trace +2 -2
  163. package/.next/trace-build +1 -1
  164. package/app/components/EmptyState.tsx +81 -39
  165. package/app/components/TopoGraph.tsx +34 -11
  166. package/app/page.tsx +4 -1
  167. package/package.json +1 -1
  168. package/scripts/empty-state-test.mjs +41 -0
  169. package/scripts/topo-r104-test.mjs +54 -0
  170. package/.next/static/chunks/06uku.~mtk9zz.js +0 -1
  171. package/.next/static/chunks/0_tkvll6kmd9r.js +0 -1
  172. package/.next/static/chunks/0al59.tqyrtlo.js +0 -1
  173. package/.next/static/chunks/0wles3.ky8_p..js +0 -1
  174. package/.next/static/chunks/1213rotrv_o6s.js +0 -1
  175. package/.next/static/chunks/171cg07p8~k-l.js +0 -1
  176. /package/.next/static/{TOOYiMCNX9C15V7ZA6gUm → ukIN0_qcdiWXoCnHr0oZ3}/_buildManifest.js +0 -0
  177. /package/.next/static/{TOOYiMCNX9C15V7ZA6gUm → ukIN0_qcdiWXoCnHr0oZ3}/_clientMiddlewareManifest.js +0 -0
  178. /package/.next/static/{TOOYiMCNX9C15V7ZA6gUm → ukIN0_qcdiWXoCnHr0oZ3}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":334,"timestamp":363189853944,"id":4,"parentId":1,"tags":{},"startTime":1778734675679,"traceId":"476e58ed709871e1"},{"name":"load-custom-routes","duration":505,"timestamp":363189854427,"id":5,"parentId":1,"tags":{},"startTime":1778734675679,"traceId":"476e58ed709871e1"},{"name":"create-dist-dir","duration":397,"timestamp":363189854976,"id":6,"parentId":1,"tags":{},"startTime":1778734675680,"traceId":"476e58ed709871e1"},{"name":"clean","duration":803,"timestamp":363189857841,"id":7,"parentId":1,"tags":{},"startTime":1778734675683,"traceId":"476e58ed709871e1"},{"name":"discover-routes","duration":17371,"timestamp":363189952448,"id":8,"parentId":1,"tags":{},"startTime":1778734675777,"traceId":"476e58ed709871e1"},{"name":"create-root-mapping","duration":316,"timestamp":363189969942,"id":9,"parentId":1,"tags":{},"startTime":1778734675795,"traceId":"476e58ed709871e1"},{"name":"generate-route-types","duration":52748,"timestamp":363189973789,"id":10,"parentId":1,"tags":{},"startTime":1778734675798,"traceId":"476e58ed709871e1"},{"name":"public-dir-conflict-check","duration":144,"timestamp":363190026770,"id":11,"parentId":1,"tags":{},"startTime":1778734675851,"traceId":"476e58ed709871e1"},{"name":"generate-routes-manifest","duration":6227,"timestamp":363190027096,"id":12,"parentId":1,"tags":{},"startTime":1778734675852,"traceId":"476e58ed709871e1"},{"name":"run-turbopack","duration":11093972,"timestamp":363190044210,"id":14,"parentId":1,"tags":{},"startTime":1778734675869,"traceId":"476e58ed709871e1"},{"name":"turbopack-build-events","duration":122,"timestamp":363190646308,"id":15,"parentId":1,"tags":{},"startTime":1778734676471,"traceId":"476e58ed709871e1"},{"name":"run-typescript","duration":9697007,"timestamp":363201146679,"id":16,"parentId":1,"tags":{},"startTime":1778734686971,"traceId":"476e58ed709871e1"},{"name":"generate-required-server-files","duration":2075,"timestamp":363210844850,"id":18,"parentId":1,"tags":{},"startTime":1778734696670,"traceId":"476e58ed709871e1"},{"name":"check-static-error-page","duration":12835,"timestamp":363210962367,"id":20,"parentId":19,"tags":{},"startTime":1778734696787,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":336711,"timestamp":363210979685,"id":62,"parentId":22,"tags":{},"startTime":1778734696804,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":350397,"timestamp":363210966116,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778734696791,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":439793,"timestamp":363210981255,"id":64,"parentId":26,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":452950,"timestamp":363210969126,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778734696794,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":447976,"timestamp":363210981330,"id":65,"parentId":27,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":460105,"timestamp":363210969255,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778734696794,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":452512,"timestamp":363210981369,"id":66,"parentId":28,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":464565,"timestamp":363210969371,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778734696794,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":460335,"timestamp":363210981410,"id":67,"parentId":29,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":472311,"timestamp":363210969495,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778734696794,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":469953,"timestamp":363210981447,"id":68,"parentId":30,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":481649,"timestamp":363210969818,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778734696795,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":474617,"timestamp":363210981482,"id":69,"parentId":32,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":485394,"timestamp":363210970795,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778734696795,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":476865,"timestamp":363210981635,"id":70,"parentId":33,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":487611,"timestamp":363210970934,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778734696796,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":480114,"timestamp":363210981709,"id":71,"parentId":34,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":490833,"timestamp":363210971036,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778734696796,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":491548,"timestamp":363210981731,"id":72,"parentId":35,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":502201,"timestamp":363210971139,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778734696796,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":496294,"timestamp":363210981794,"id":73,"parentId":36,"tags":{},"startTime":1778734696806,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":506593,"timestamp":363210971560,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778734696796,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":502798,"timestamp":363210979339,"id":61,"parentId":21,"tags":{},"startTime":1778734696804,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":517290,"timestamp":363210964911,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778734696790,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":507861,"timestamp":363210981813,"id":74,"parentId":37,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":518019,"timestamp":363210971714,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778734696796,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":519078,"timestamp":363210981833,"id":76,"parentId":39,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":529095,"timestamp":363210971870,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":528969,"timestamp":363210981839,"id":77,"parentId":40,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":538939,"timestamp":363210971929,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":531215,"timestamp":363210981847,"id":78,"parentId":41,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":541183,"timestamp":363210971989,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":534765,"timestamp":363210981855,"id":79,"parentId":42,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":544595,"timestamp":363210972079,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":548445,"timestamp":363210981860,"id":80,"parentId":43,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":558227,"timestamp":363210972140,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":562855,"timestamp":363210981869,"id":81,"parentId":44,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":572590,"timestamp":363210972203,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":572977,"timestamp":363210981877,"id":82,"parentId":45,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":582656,"timestamp":363210972260,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":574620,"timestamp":363210981825,"id":75,"parentId":38,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":584686,"timestamp":363210971806,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778734696796,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":576344,"timestamp":363210981882,"id":83,"parentId":46,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":585925,"timestamp":363210972341,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":580124,"timestamp":363210981899,"id":85,"parentId":48,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":589607,"timestamp":363210972463,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":580280,"timestamp":363210981890,"id":84,"parentId":47,"tags":{},"startTime":1778734696807,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":589788,"timestamp":363210972402,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":576665,"timestamp":363210990070,"id":87,"parentId":31,"tags":{},"startTime":1778734696815,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":596827,"timestamp":363210969964,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778734696795,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":560130,"timestamp":363211014141,"id":88,"parentId":23,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":608038,"timestamp":363210966323,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778734696791,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":585492,"timestamp":363210989136,"id":86,"parentId":24,"tags":{},"startTime":1778734696814,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":608105,"timestamp":363210966548,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778734696791,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":569426,"timestamp":363211014187,"id":89,"parentId":49,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":610885,"timestamp":363210972791,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778734696797,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":572350,"timestamp":363211014204,"id":91,"parentId":51,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":613518,"timestamp":363210973104,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778734696798,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":580294,"timestamp":363211014212,"id":92,"parentId":52,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":621276,"timestamp":363210973286,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778734696798,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":586645,"timestamp":363211014218,"id":93,"parentId":53,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":627502,"timestamp":363210973459,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778734696798,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":592408,"timestamp":363211014227,"id":94,"parentId":55,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":632570,"timestamp":363210974121,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778734696799,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":631276,"timestamp":363210979793,"id":63,"parentId":25,"tags":{},"startTime":1778734696804,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":642236,"timestamp":363210968907,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778734696794,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":598228,"timestamp":363211014235,"id":95,"parentId":56,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":638225,"timestamp":363210974292,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778734696799,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":610119,"timestamp":363211014248,"id":97,"parentId":59,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":649574,"timestamp":363210974862,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778734696800,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":616262,"timestamp":363211014258,"id":98,"parentId":60,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":655621,"timestamp":363210974975,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778734696800,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":618556,"timestamp":363211014197,"id":90,"parentId":50,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":659884,"timestamp":363210972930,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778734696798,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":619790,"timestamp":363211018479,"id":100,"parentId":57,"tags":{},"startTime":1778734696843,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":663888,"timestamp":363210974440,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778734696799,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":630633,"timestamp":363211014266,"id":99,"parentId":54,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":671281,"timestamp":363210973675,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778734696798,"traceId":"476e58ed709871e1"},{"name":"is-page-static","duration":660312,"timestamp":363211014240,"id":96,"parentId":58,"tags":{},"startTime":1778734696839,"traceId":"476e58ed709871e1"},{"name":"check-page","duration":699869,"timestamp":363210974756,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778734696799,"traceId":"476e58ed709871e1"},{"name":"static-check","duration":713385,"timestamp":363210961282,"id":19,"parentId":1,"tags":{},"startTime":1778734696786,"traceId":"476e58ed709871e1"},{"name":"write-routes-manifest","duration":740,"timestamp":363211681426,"id":102,"parentId":1,"tags":{},"startTime":1778734697506,"traceId":"476e58ed709871e1"},{"name":"load-dotenv","duration":61,"timestamp":363211695562,"id":105,"parentId":104,"tags":{},"startTime":1778734697520,"traceId":"476e58ed709871e1"},{"name":"run-export-path-map","duration":714,"timestamp":363211699052,"id":106,"parentId":104,"tags":{},"startTime":1778734697524,"traceId":"476e58ed709871e1"},{"name":"next-export","duration":672135,"timestamp":363211694266,"id":104,"parentId":1,"tags":{},"startTime":1778734697519,"traceId":"476e58ed709871e1"},{"name":"move-exported-app-not-found-","duration":980,"timestamp":363212370459,"id":107,"parentId":103,"tags":{},"startTime":1778734698195,"traceId":"476e58ed709871e1"},{"name":"move-exported-app-global-error-","duration":1427,"timestamp":363212371553,"id":108,"parentId":103,"tags":{},"startTime":1778734698196,"traceId":"476e58ed709871e1"}]
2
- [{"name":"static-generation","duration":692708,"timestamp":363211687703,"id":103,"parentId":1,"tags":{},"startTime":1778734697512,"traceId":"476e58ed709871e1"},{"name":"write-routes-manifest","duration":450,"timestamp":363212380692,"id":109,"parentId":1,"tags":{},"startTime":1778734698205,"traceId":"476e58ed709871e1"},{"name":"print-tree-view","duration":3703,"timestamp":363212389780,"id":110,"parentId":1,"tags":{},"startTime":1778734698214,"traceId":"476e58ed709871e1"},{"name":"write-route-bundle-stats","duration":22685,"timestamp":363212393523,"id":111,"parentId":1,"tags":{},"startTime":1778734698218,"traceId":"476e58ed709871e1"},{"name":"telemetry-flush","duration":25016,"timestamp":363212416256,"id":112,"parentId":1,"tags":{},"startTime":1778734698241,"traceId":"476e58ed709871e1"},{"name":"next-build","duration":22655220,"timestamp":363189786094,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778734675611,"traceId":"476e58ed709871e1"}]
1
+ [{"name":"generate-buildid","duration":323,"timestamp":365434777808,"id":4,"parentId":1,"tags":{},"startTime":1778736920603,"traceId":"a60b7cd740d47617"},{"name":"load-custom-routes","duration":587,"timestamp":365434778286,"id":5,"parentId":1,"tags":{},"startTime":1778736920603,"traceId":"a60b7cd740d47617"},{"name":"create-dist-dir","duration":338,"timestamp":365434778920,"id":6,"parentId":1,"tags":{},"startTime":1778736920604,"traceId":"a60b7cd740d47617"},{"name":"clean","duration":515,"timestamp":365434780044,"id":7,"parentId":1,"tags":{},"startTime":1778736920605,"traceId":"a60b7cd740d47617"},{"name":"discover-routes","duration":10332,"timestamp":365434862249,"id":8,"parentId":1,"tags":{},"startTime":1778736920687,"traceId":"a60b7cd740d47617"},{"name":"create-root-mapping","duration":125,"timestamp":365434872649,"id":9,"parentId":1,"tags":{},"startTime":1778736920697,"traceId":"a60b7cd740d47617"},{"name":"generate-route-types","duration":33426,"timestamp":365434874970,"id":10,"parentId":1,"tags":{},"startTime":1778736920700,"traceId":"a60b7cd740d47617"},{"name":"public-dir-conflict-check","duration":109,"timestamp":365434908616,"id":11,"parentId":1,"tags":{},"startTime":1778736920733,"traceId":"a60b7cd740d47617"},{"name":"generate-routes-manifest","duration":5004,"timestamp":365434908856,"id":12,"parentId":1,"tags":{},"startTime":1778736920734,"traceId":"a60b7cd740d47617"},{"name":"run-turbopack","duration":10040238,"timestamp":365434919140,"id":14,"parentId":1,"tags":{},"startTime":1778736920744,"traceId":"a60b7cd740d47617"},{"name":"turbopack-build-events","duration":125,"timestamp":365435284927,"id":15,"parentId":1,"tags":{},"startTime":1778736921110,"traceId":"a60b7cd740d47617"},{"name":"run-typescript","duration":8308073,"timestamp":365444970643,"id":16,"parentId":1,"tags":{},"startTime":1778736930795,"traceId":"a60b7cd740d47617"},{"name":"generate-required-server-files","duration":3279,"timestamp":365453279635,"id":18,"parentId":1,"tags":{},"startTime":1778736939104,"traceId":"a60b7cd740d47617"},{"name":"check-static-error-page","duration":14203,"timestamp":365453362556,"id":20,"parentId":19,"tags":{},"startTime":1778736939187,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":306045,"timestamp":365453383159,"id":62,"parentId":22,"tags":{},"startTime":1778736939208,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":324391,"timestamp":365453364925,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778736939190,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":393510,"timestamp":365453383399,"id":64,"parentId":26,"tags":{},"startTime":1778736939208,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":406766,"timestamp":365453370272,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778736939195,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":429196,"timestamp":365453386207,"id":65,"parentId":27,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":445121,"timestamp":365453370362,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778736939195,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":443160,"timestamp":365453386300,"id":66,"parentId":28,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":459078,"timestamp":365453370444,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778736939195,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":447257,"timestamp":365453386341,"id":67,"parentId":29,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":463139,"timestamp":365453370519,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778736939195,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":450765,"timestamp":365453386397,"id":68,"parentId":30,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":466486,"timestamp":365453370738,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778736939195,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":454365,"timestamp":365453386443,"id":69,"parentId":32,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":469791,"timestamp":365453371072,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778736939196,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":457566,"timestamp":365453386587,"id":70,"parentId":33,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":473037,"timestamp":365453371167,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778736939196,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":463987,"timestamp":365453383261,"id":63,"parentId":25,"tags":{},"startTime":1778736939208,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":477229,"timestamp":365453370087,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778736939195,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":460857,"timestamp":365453386637,"id":71,"parentId":34,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":476278,"timestamp":365453371244,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778736939196,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":464329,"timestamp":365453386911,"id":73,"parentId":36,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":479624,"timestamp":365453371662,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778736939196,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":468222,"timestamp":365453386941,"id":74,"parentId":37,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":483425,"timestamp":365453371785,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778736939196,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":471322,"timestamp":365453386950,"id":75,"parentId":38,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":486443,"timestamp":365453371871,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":476119,"timestamp":365453386956,"id":76,"parentId":39,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":491198,"timestamp":365453371934,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":478131,"timestamp":365453386962,"id":77,"parentId":40,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":493134,"timestamp":365453371994,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":481158,"timestamp":365453386968,"id":78,"parentId":41,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":496092,"timestamp":365453372073,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":487395,"timestamp":365453386658,"id":72,"parentId":35,"tags":{},"startTime":1778736939211,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":502796,"timestamp":365453371323,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778736939196,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":487261,"timestamp":365453386973,"id":79,"parentId":42,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":502119,"timestamp":365453372138,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":496019,"timestamp":365453382750,"id":61,"parentId":21,"tags":{},"startTime":1778736939207,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":515125,"timestamp":365453363695,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778736939188,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":491975,"timestamp":365453386983,"id":81,"parentId":44,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":506729,"timestamp":365453372264,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":493999,"timestamp":365453386978,"id":80,"parentId":43,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":508836,"timestamp":365453372196,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":495942,"timestamp":365453386993,"id":83,"parentId":46,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":510578,"timestamp":365453372404,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":497241,"timestamp":365453386998,"id":84,"parentId":47,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":513607,"timestamp":365453372467,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":499544,"timestamp":365453387018,"id":85,"parentId":48,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":514094,"timestamp":365453372529,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":498703,"timestamp":365453389789,"id":86,"parentId":24,"tags":{},"startTime":1778736939214,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":523175,"timestamp":365453365351,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778736939190,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":500027,"timestamp":365453390526,"id":87,"parentId":31,"tags":{},"startTime":1778736939215,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":519780,"timestamp":365453370831,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778736939196,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":530193,"timestamp":365453407891,"id":88,"parentId":23,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":572978,"timestamp":365453365170,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778736939190,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":536946,"timestamp":365453407941,"id":90,"parentId":50,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":571957,"timestamp":365453372987,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778736939198,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":537213,"timestamp":365453407928,"id":89,"parentId":49,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":572305,"timestamp":365453372863,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778736939198,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":561627,"timestamp":365453386988,"id":82,"parentId":45,"tags":{},"startTime":1778736939212,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":576344,"timestamp":365453372321,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778736939197,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":543190,"timestamp":365453407954,"id":91,"parentId":51,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":578053,"timestamp":365453373131,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778736939198,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":543346,"timestamp":365453407963,"id":92,"parentId":52,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":578014,"timestamp":365453373314,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778736939198,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":546265,"timestamp":365453407974,"id":93,"parentId":53,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":580810,"timestamp":365453373486,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778736939198,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":550132,"timestamp":365453407988,"id":95,"parentId":56,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":583809,"timestamp":365453374351,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778736939199,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":550301,"timestamp":365453407983,"id":94,"parentId":55,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":584138,"timestamp":365453374168,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778736939199,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":553323,"timestamp":365453407996,"id":96,"parentId":58,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":584974,"timestamp":365453376385,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778736939201,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":555434,"timestamp":365453408031,"id":98,"parentId":60,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":586909,"timestamp":365453376591,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778736939201,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":556390,"timestamp":365453408043,"id":99,"parentId":57,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":588421,"timestamp":365453376048,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778736939201,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":560610,"timestamp":365453408052,"id":100,"parentId":54,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":594997,"timestamp":365453373701,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778736939198,"traceId":"a60b7cd740d47617"},{"name":"is-page-static","duration":563671,"timestamp":365453408019,"id":97,"parentId":59,"tags":{},"startTime":1778736939233,"traceId":"a60b7cd740d47617"},{"name":"check-page","duration":595252,"timestamp":365453376485,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778736939201,"traceId":"a60b7cd740d47617"},{"name":"static-check","duration":610057,"timestamp":365453361726,"id":19,"parentId":1,"tags":{},"startTime":1778736939186,"traceId":"a60b7cd740d47617"},{"name":"write-routes-manifest","duration":570,"timestamp":365453978459,"id":102,"parentId":1,"tags":{},"startTime":1778736939803,"traceId":"a60b7cd740d47617"},{"name":"load-dotenv","duration":58,"timestamp":365453991709,"id":105,"parentId":104,"tags":{},"startTime":1778736939816,"traceId":"a60b7cd740d47617"},{"name":"run-export-path-map","duration":679,"timestamp":365453994795,"id":106,"parentId":104,"tags":{},"startTime":1778736939819,"traceId":"a60b7cd740d47617"},{"name":"next-export","duration":553198,"timestamp":365453990450,"id":104,"parentId":1,"tags":{},"startTime":1778736939815,"traceId":"a60b7cd740d47617"},{"name":"move-exported-app-not-found-","duration":598,"timestamp":365454547010,"id":107,"parentId":103,"tags":{},"startTime":1778736940372,"traceId":"a60b7cd740d47617"},{"name":"move-exported-app-global-error-","duration":384,"timestamp":365454547705,"id":108,"parentId":103,"tags":{},"startTime":1778736940372,"traceId":"a60b7cd740d47617"}]
2
+ [{"name":"static-generation","duration":568162,"timestamp":365453984251,"id":103,"parentId":1,"tags":{},"startTime":1778736939809,"traceId":"a60b7cd740d47617"},{"name":"write-routes-manifest","duration":401,"timestamp":365454552616,"id":109,"parentId":1,"tags":{},"startTime":1778736940377,"traceId":"a60b7cd740d47617"},{"name":"print-tree-view","duration":4479,"timestamp":365454559853,"id":110,"parentId":1,"tags":{},"startTime":1778736940385,"traceId":"a60b7cd740d47617"},{"name":"write-route-bundle-stats","duration":15457,"timestamp":365454564372,"id":111,"parentId":1,"tags":{},"startTime":1778736940389,"traceId":"a60b7cd740d47617"},{"name":"telemetry-flush","duration":39919,"timestamp":365454579868,"id":112,"parentId":1,"tags":{},"startTime":1778736940405,"traceId":"a60b7cd740d47617"},{"name":"next-build","duration":19896694,"timestamp":365434723132,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778736920548,"traceId":"a60b7cd740d47617"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":11093972,"timestamp":363190044210,"id":14,"parentId":1,"tags":{},"startTime":1778734675869,"traceId":"476e58ed709871e1"},{"name":"turbopack-build-events","duration":122,"timestamp":363190646308,"id":15,"parentId":1,"tags":{},"startTime":1778734676471,"traceId":"476e58ed709871e1"},{"name":"run-typescript","duration":9697007,"timestamp":363201146679,"id":16,"parentId":1,"tags":{},"startTime":1778734686971,"traceId":"476e58ed709871e1"},{"name":"static-check","duration":713385,"timestamp":363210961282,"id":19,"parentId":1,"tags":{},"startTime":1778734696786,"traceId":"476e58ed709871e1"},{"name":"static-generation","duration":692708,"timestamp":363211687703,"id":103,"parentId":1,"tags":{},"startTime":1778734697512,"traceId":"476e58ed709871e1"},{"name":"telemetry-flush","duration":25016,"timestamp":363212416256,"id":112,"parentId":1,"tags":{},"startTime":1778734698241,"traceId":"476e58ed709871e1"},{"name":"next-build","duration":22655220,"timestamp":363189786094,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778734675611,"traceId":"476e58ed709871e1"}]
1
+ [{"name":"run-turbopack","duration":10040238,"timestamp":365434919140,"id":14,"parentId":1,"tags":{},"startTime":1778736920744,"traceId":"a60b7cd740d47617"},{"name":"turbopack-build-events","duration":125,"timestamp":365435284927,"id":15,"parentId":1,"tags":{},"startTime":1778736921110,"traceId":"a60b7cd740d47617"},{"name":"run-typescript","duration":8308073,"timestamp":365444970643,"id":16,"parentId":1,"tags":{},"startTime":1778736930795,"traceId":"a60b7cd740d47617"},{"name":"static-check","duration":610057,"timestamp":365453361726,"id":19,"parentId":1,"tags":{},"startTime":1778736939186,"traceId":"a60b7cd740d47617"},{"name":"static-generation","duration":568162,"timestamp":365453984251,"id":103,"parentId":1,"tags":{},"startTime":1778736939809,"traceId":"a60b7cd740d47617"},{"name":"telemetry-flush","duration":39919,"timestamp":365454579868,"id":112,"parentId":1,"tags":{},"startTime":1778736940405,"traceId":"a60b7cd740d47617"},{"name":"next-build","duration":19896694,"timestamp":365434723132,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778736920548,"traceId":"a60b7cd740d47617"}]
@@ -167,56 +167,98 @@ export function EmptyState({ variant = 'generic', title, sub, cta, compact = fal
167
167
  );
168
168
  }
169
169
 
170
+ /** Round 105 (issue #90): centered card shell so the Overview empty state
171
+ * reads as an intentional, layout-aligned card instead of bare text
172
+ * floating in the content column. */
173
+ function EmptyCard({ children }: { children: React.ReactNode }) {
174
+ return (
175
+ <div className="max-w-2xl mx-auto rounded-xl border border-[#2a2a4a] bg-[#111128] shadow-lg shadow-black/20">
176
+ {children}
177
+ </div>
178
+ );
179
+ }
180
+
170
181
  /**
171
- * Overview-specific variant with a hint about cross-network global count.
172
- * Kept here so /app/page.tsx can drop in without ceremony.
182
+ * Overview-specific variant. Three cases:
183
+ * 1. network-mismatch — agents exist globally, none in this network
184
+ * 2. agents-offline — 0 registered now BUT task history exists, so this
185
+ * is NOT a first run (round 105 / issue #90: showing "Spin up your
186
+ * first agent" next to "acked: 499" was misleading)
187
+ * 3. true first-run — 0 agents, 0 history → quickstart command
173
188
  */
174
- export function NodesEmptyState({ hint }: { hint?: { global_count?: number; filtered_network?: string } }) {
189
+ export function NodesEmptyState({
190
+ hint,
191
+ taskHistoryCount = 0,
192
+ }: {
193
+ hint?: { global_count?: number; filtered_network?: string };
194
+ taskHistoryCount?: number;
195
+ }) {
175
196
  if (hint?.global_count) {
176
197
  return (
177
- <EmptyState
178
- variant="nodes"
179
- title="No agents in this network"
180
- sub={`Server has ${hint.global_count} nodes globally, but none are registered to the current network. Switch network or contact admin.`}
181
- />
198
+ <EmptyCard>
199
+ <EmptyState
200
+ variant="nodes"
201
+ title="No agents in this network"
202
+ sub={`Server has ${hint.global_count} nodes globally, but none are registered to the current network. Switch network or contact admin.`}
203
+ />
204
+ </EmptyCard>
182
205
  );
183
206
  }
207
+
208
+ // Round 105 (issue #90): there's task history but no agents online right
209
+ // now — they finished or disconnected. Don't pitch a first-run setup;
210
+ // point at the history instead.
211
+ if (taskHistoryCount > 0) {
212
+ return (
213
+ <EmptyCard>
214
+ <EmptyState
215
+ variant="nodes"
216
+ title="No agents online"
217
+ sub={`Every agent in this network is currently offline. ${taskHistoryCount.toLocaleString()} task${taskHistoryCount === 1 ? '' : 's'} in history — they may have finished their work or disconnected.`}
218
+ cta={{ label: 'View task history', href: '/tasks' }}
219
+ />
220
+ </EmptyCard>
221
+ );
222
+ }
223
+
184
224
  // Round 52: true empty state (zero agents anywhere) — show the
185
225
  // quickstart command inline so users don't have to leave the dashboard
186
226
  // to figure out how to spin up their first agent.
187
227
  return (
188
- <div className="text-center py-16 px-4" role="status">
189
- <div className="anet-empty-glyph inline-flex items-center justify-center mb-4 text-gray-500" aria-hidden>
190
- <svg viewBox="0 0 64 64" width={56} height={56}>
191
- <g stroke="currentColor" strokeWidth="1.5" fill="none">
192
- <rect x="10" y="20" width="44" height="28" rx="2" />
193
- <rect x="20" y="32" width="6" height="8" opacity="0.5" />
194
- <rect x="32" y="32" width="6" height="8" opacity="0.5" />
195
- <rect x="44" y="32" width="4" height="8" opacity="0.5" />
196
- <line x1="10" y1="26" x2="54" y2="26" opacity="0.4" />
197
- <circle cx="14" cy="23" r="0.8" fill="currentColor" />
198
- </g>
199
- </svg>
200
- </div>
201
- <h3 className="font-medium text-gray-300 text-base">Spin up your first agent</h3>
202
- <p className="text-gray-500 text-sm mt-2 max-w-md mx-auto leading-relaxed">
203
- Run this in a fresh terminal to register an agent with this CommHub:
204
- </p>
205
- <div className="mt-4 inline-block">
206
- <QuickstartCommand cmd="npx --yes @sleep2agi/agent-network init" />
207
- </div>
208
- <div className="mt-3">
209
- <a
210
- href="https://anet.sh"
211
- target="_blank"
212
- rel="noopener noreferrer"
213
- className="inline-flex items-center gap-1.5 text-xs font-medium text-gray-500 hover:text-cyan-300"
214
- >
215
- Full quickstart guide
216
- <span aria-hidden>→</span>
217
- </a>
228
+ <EmptyCard>
229
+ <div className="text-center py-16 px-4" role="status">
230
+ <div className="anet-empty-glyph inline-flex items-center justify-center mb-4 text-gray-500" aria-hidden>
231
+ <svg viewBox="0 0 64 64" width={56} height={56}>
232
+ <g stroke="currentColor" strokeWidth="1.5" fill="none">
233
+ <rect x="10" y="20" width="44" height="28" rx="2" />
234
+ <rect x="20" y="32" width="6" height="8" opacity="0.5" />
235
+ <rect x="32" y="32" width="6" height="8" opacity="0.5" />
236
+ <rect x="44" y="32" width="4" height="8" opacity="0.5" />
237
+ <line x1="10" y1="26" x2="54" y2="26" opacity="0.4" />
238
+ <circle cx="14" cy="23" r="0.8" fill="currentColor" />
239
+ </g>
240
+ </svg>
241
+ </div>
242
+ <h3 className="font-medium text-gray-300 text-base">Spin up your first agent</h3>
243
+ <p className="text-gray-500 text-sm mt-2 max-w-md mx-auto leading-relaxed">
244
+ Run this in a fresh terminal to register an agent with this CommHub:
245
+ </p>
246
+ <div className="mt-4 inline-block">
247
+ <QuickstartCommand cmd="npx --yes @sleep2agi/agent-network init" />
248
+ </div>
249
+ <div className="mt-3">
250
+ <a
251
+ href="https://anet.sh"
252
+ target="_blank"
253
+ rel="noopener noreferrer"
254
+ className="inline-flex items-center gap-1.5 text-xs font-medium text-gray-500 hover:text-cyan-300"
255
+ >
256
+ Full quickstart guide
257
+ <span aria-hidden>→</span>
258
+ </a>
259
+ </div>
218
260
  </div>
219
- </div>
261
+ </EmptyCard>
220
262
  );
221
263
  }
222
264
 
@@ -425,7 +425,13 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
425
425
  const mx = ((e.clientX - rect.left) / rect.width) * VIEWBOX_W;
426
426
  const my = ((e.clientY - rect.top) / rect.height) * VIEWBOX_H;
427
427
  setView(prev => {
428
- const factor = e.deltaY < 0 ? 1.15 : 1 / 1.15;
428
+ // Round 104 (issue #81 follow-up): Vincent 实测 zoom 太灵敏. The
429
+ // old factor was a fixed 1.15x per wheel *event* — fine for a
430
+ // mouse notch but a trackpad fires dozens of events per gesture
431
+ // so it compounded into huge jumps. Scale the factor by deltaY
432
+ // magnitude with a small coefficient, then clamp the per-event
433
+ // change so no single tick moves more than ~8%.
434
+ const factor = Math.min(1.08, Math.max(0.926, Math.exp(-e.deltaY * 0.0006)));
429
435
  const nz = Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, prev.zoom * factor));
430
436
  const ratio = nz / prev.zoom;
431
437
  // keep the point under the cursor stationary
@@ -458,8 +464,11 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
458
464
  setView(prev => ({ ...prev, x: d.baseX + dx, y: d.baseY + dy }));
459
465
  };
460
466
  const onPointerUp = (e: React.PointerEvent<SVGSVGElement>) => {
467
+ if (!dragRef.current.active) return;
461
468
  dragRef.current.active = false;
462
- (e.currentTarget as Element).releasePointerCapture?.(e.pointerId);
469
+ try {
470
+ (e.currentTarget as Element).releasePointerCapture?.(e.pointerId);
471
+ } catch {}
463
472
  };
464
473
 
465
474
  // zoom buttons — zoom around the canvas center
@@ -871,31 +880,33 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
871
880
  </svg>
872
881
 
873
882
  {/* Round 103 (issue #81): zoom / pan / fullscreen controls — HTML
874
- overlay so they stay fixed while the SVG content transforms. */}
883
+ overlay so they stay fixed while the SVG content transforms.
884
+ Round 104: Vincent 实测 — the reset action used to be hidden
885
+ behind the "%" label (looked like an indicator, not a button).
886
+ Split into a plain % readout + an explicit reset button with
887
+ its own icon + tooltip. */}
875
888
  <div className="absolute bottom-3 right-3 flex items-center gap-1.5 text-xs select-none">
876
889
  <div
877
890
  className="flex items-center rounded-md border overflow-hidden"
878
891
  style={{ background: pal.legendBox.fill, borderColor: pal.containerBorder }}
879
892
  >
880
893
  <button
881
- onClick={() => zoomBy(1 / 1.25)}
894
+ onClick={() => zoomBy(1 / 1.2)}
882
895
  className="px-2 py-1 hover:bg-white/5 transition-colors"
883
896
  style={{ color: pal.legendText }}
884
897
  aria-label="Zoom out"
885
898
  >
886
899
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" aria-hidden><path d="M5 12h14" /></svg>
887
900
  </button>
888
- <button
889
- onClick={resetView}
890
- className="px-2 py-1 tabular-nums hover:bg-white/5 transition-colors border-x"
901
+ <span
902
+ className="px-2 py-1 tabular-nums border-x text-center"
891
903
  style={{ color: pal.legendText, borderColor: pal.containerBorder, minWidth: 46 }}
892
- aria-label="Reset view"
893
- title="Reset zoom + pan"
904
+ title="Current zoom level"
894
905
  >
895
906
  {Math.round(view.zoom * 100)}%
896
- </button>
907
+ </span>
897
908
  <button
898
- onClick={() => zoomBy(1.25)}
909
+ onClick={() => zoomBy(1.2)}
899
910
  className="px-2 py-1 hover:bg-white/5 transition-colors"
900
911
  style={{ color: pal.legendText }}
901
912
  aria-label="Zoom in"
@@ -903,6 +914,18 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
903
914
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" aria-hidden><path d="M12 5v14M5 12h14" /></svg>
904
915
  </button>
905
916
  </div>
917
+ <button
918
+ onClick={resetView}
919
+ className="p-1.5 rounded-md border hover:bg-white/5 transition-colors"
920
+ style={{ background: pal.legendBox.fill, borderColor: pal.containerBorder, color: pal.legendText }}
921
+ aria-label="Reset view"
922
+ title="Reset zoom + pan (or double-click the canvas)"
923
+ >
924
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden>
925
+ <path d="M3 12a9 9 0 1 0 9-9 9 9 0 0 0-6.4 2.6L3 8" />
926
+ <path d="M3 3v5h5" />
927
+ </svg>
928
+ </button>
906
929
  <button
907
930
  onClick={toggleFullscreen}
908
931
  className="p-1.5 rounded-md border hover:bg-white/5 transition-colors"
package/app/page.tsx CHANGED
@@ -372,7 +372,10 @@ export default function Dashboard() {
372
372
  {showTopo && sessions.length > 0 && <TopoGraph sessions={sessions} sseSessions={sseSessions} />}
373
373
 
374
374
  {sessions.length === 0 && !sessError ? (
375
- <EmptyState hint={sessHint} />
375
+ <EmptyState
376
+ hint={sessHint}
377
+ taskHistoryCount={Object.values(taskStats).reduce((a, b) => a + b, 0)}
378
+ />
376
379
  ) : (() => {
377
380
  const counts = {
378
381
  all: sortedSessions.length,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.4.5-preview.86",
3
+ "version": "0.4.5-preview.88",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,41 @@
1
+ import { chromium } from 'playwright';
2
+ const TOKEN = process.env.LOOP_REVIEW_TOKEN;
3
+ const browser = await chromium.launch({ headless: true });
4
+
5
+ async function shoot(name, { emptyStats }) {
6
+ const ctx = await browser.newContext({ viewport: { width: 1440, height: 900 } });
7
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
8
+ await ctx.addInitScript(() => { try { localStorage.setItem('anet-theme','cyber'); sessionStorage.setItem('anet_v3_auth','1'); } catch {} });
9
+ // force 0 sessions
10
+ await ctx.route('**/api/hub/status*', async (route) => {
11
+ const r = await route.fetch(); const b = await r.json();
12
+ await route.fulfill({ response: r, json: { ...b, sessions: [] } });
13
+ });
14
+ if (emptyStats) {
15
+ // also zero out task history → true first-run
16
+ await ctx.route('**/api/hub/stats*', async (route) => {
17
+ const r = await route.fetch(); const b = await r.json();
18
+ await route.fulfill({ response: r, json: { ...b, tasks: { by_status: [] } } });
19
+ });
20
+ await ctx.route('**/api/hub/tasks*', async (route) => {
21
+ const r = await route.fetch(); const b = await r.json();
22
+ await route.fulfill({ response: r, json: { ...b, tasks: [] } });
23
+ });
24
+ }
25
+ const page = await ctx.newPage();
26
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
27
+ await page.waitForTimeout(3000);
28
+ // find the empty-state card text
29
+ const txt = await page.evaluate(() => {
30
+ const h3 = [...document.querySelectorAll('h3')].map(h => h.textContent?.trim());
31
+ return h3.filter(t => /agent/i.test(t || ''));
32
+ });
33
+ console.log(name, '→ empty-state headline(s):', JSON.stringify(txt));
34
+ await page.screenshot({ path: `/tmp/anet-issue-50/empty-${name}.png`, fullPage: true });
35
+ await ctx.close();
36
+ }
37
+
38
+ await shoot('with-history', { emptyStats: false }); // 0 sessions, real task history → "No agents online"
39
+ await shoot('true-firstrun', { emptyStats: true }); // 0 sessions, 0 tasks → "Spin up your first agent"
40
+ await browser.close();
41
+ console.log('done');
@@ -0,0 +1,54 @@
1
+ import { chromium } from 'playwright';
2
+ const TOKEN = process.env.LOOP_REVIEW_TOKEN;
3
+ const browser = await chromium.launch({ headless: true });
4
+ const ctx = await browser.newContext({ viewport: { width: 1440, height: 900 } });
5
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
6
+ await ctx.addInitScript(() => { try { localStorage.setItem('anet-theme','cyber'); localStorage.removeItem('anet-topo-view'); sessionStorage.setItem('anet_v3_auth','1'); } catch {} });
7
+ const page = await ctx.newPage();
8
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
9
+ await page.waitForFunction(() => {
10
+ const svg = document.querySelector('svg[viewBox="0 0 1000 680"]');
11
+ return !!svg && svg.querySelectorAll('circle[r="26"]').length > 0;
12
+ }, { timeout: 30000 }).catch(() => {});
13
+ await page.waitForTimeout(800);
14
+ await page.evaluate(() => { const h=[...document.querySelectorAll('h2')].find(x=>/Command mesh/i.test(x.textContent||'')); h?.scrollIntoView({behavior:'instant',block:'center'}); });
15
+ await page.waitForTimeout(400);
16
+ const scaleOf = () => page.evaluate(() => {
17
+ const g = document.querySelector('svg[viewBox="0 0 1000 680"] > g[transform^="translate"]');
18
+ const m = g?.getAttribute('transform')?.match(/scale\(([\d.]+)\)/);
19
+ return m ? parseFloat(m[1]) : null;
20
+ });
21
+ const svgBox = await page.locator('svg[viewBox="0 0 1000 680"]').boundingBox();
22
+ const cx = svgBox.x + svgBox.width/2, cy = svgBox.y + svgBox.height/2;
23
+
24
+ // single wheel tick (deltaY -100, typical mouse notch)
25
+ await page.mouse.move(cx, cy);
26
+ const s0 = await scaleOf();
27
+ await page.mouse.wheel(0, -100);
28
+ await page.waitForTimeout(150);
29
+ const s1 = await scaleOf();
30
+ console.log('one wheel notch (-100): scale', s0, '->', s1, '(' + ((s1/s0-1)*100).toFixed(1) + '% per notch)');
31
+
32
+ // reset button is now a separate icon button
33
+ await page.locator('button[aria-label="Reset view"]').click();
34
+ await page.waitForTimeout(150);
35
+ console.log('after reset-button click: scale', await scaleOf());
36
+
37
+ // % is now a plain span, not a button
38
+ const pctIsButton = await page.evaluate(() => {
39
+ const el = [...document.querySelectorAll('span')].find(s => /^\d+%$/.test(s.textContent?.trim()||''));
40
+ return el ? el.tagName : 'NOT_FOUND';
41
+ });
42
+ console.log('zoom % element tag:', pctIsButton, '(expect SPAN)');
43
+
44
+ // zoom in twice then double-click to reset
45
+ await page.locator('button[aria-label="Zoom in"]').click();
46
+ await page.locator('button[aria-label="Zoom in"]').click();
47
+ await page.waitForTimeout(150);
48
+ console.log('after 2x zoom-in button: scale', await scaleOf());
49
+ await page.mouse.dblclick(cx, cy);
50
+ await page.waitForTimeout(150);
51
+ console.log('after double-click canvas: scale', await scaleOf(), '(expect 1)');
52
+
53
+ await browser.close();
54
+ console.log('done');
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18150,e=>{"use strict";e.s(["formatUptime",0,function(e){let t=Math.floor(e/3600),s=Math.floor(e%3600/60);return t>0?`${t}h ${s}m`:`${s}m`},"previewContent",0,function(e){return e&&e.replace(/!\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/\s+/g," ").trim()||"--"},"timeAgo",0,function(e){if(!e)return"--";let t=Math.floor((Date.now()-new Date(e.replace(" ","T")+"Z").getTime())/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}])},95356,e=>{"use strict";var t=e.i(18050),s=e.i(71645),a=e.i(22016);let r={nodes:{title:"No agents in this network",sub:"Agent sessions will appear here once they connect to the CommHub."},tasks:{title:"No tasks yet",sub:"Tasks will appear here when agents send them via CommHub."},messages:{title:"No messages",sub:"Messages between agents will appear here."},logs:{title:"No audit logs",sub:"Events will appear here when users register, login, or perform actions."},tokens:{title:"No API tokens",sub:"Create one to authenticate CLI tools and external integrations."},networks:{title:"No networks found",sub:"Create one or sign in with V3 auth to see your networks."},generic:{title:"Nothing here yet",sub:"Data will appear here once available."}};function n({variant:e,size:s}){let a={width:s,height:s},r={fill:"none",stroke:"currentColor",strokeWidth:1.25,strokeLinecap:"round",strokeLinejoin:"round"};switch(e){case"nodes":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...r,children:[(0,t.jsx)("circle",{cx:"32",cy:"14",r:"4"}),(0,t.jsx)("circle",{cx:"14",cy:"44",r:"4"}),(0,t.jsx)("circle",{cx:"50",cy:"44",r:"4"}),(0,t.jsx)("line",{x1:"32",y1:"18",x2:"14",y2:"40",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("line",{x1:"32",y1:"18",x2:"50",y2:"40",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("line",{x1:"18",y1:"44",x2:"46",y2:"44",strokeDasharray:"3 3",opacity:"0.6"})]})});case"tasks":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...r,children:[(0,t.jsx)("rect",{x:"14",y:"14",width:"36",height:"6",rx:"1.5"}),(0,t.jsx)("rect",{x:"14",y:"26",width:"36",height:"6",rx:"1.5",opacity:"0.6"}),(0,t.jsx)("rect",{x:"14",y:"38",width:"36",height:"6",rx:"1.5",opacity:"0.35"})]})});case"messages":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...r,children:[(0,t.jsx)("path",{d:"M14 18 h36 a3 3 0 0 1 3 3 v18 a3 3 0 0 1 -3 3 h-18 l-8 6 v-6 h-10 a3 3 0 0 1 -3 -3 v-18 a3 3 0 0 1 3 -3 z"}),(0,t.jsx)("line",{x1:"22",y1:"28",x2:"42",y2:"28",opacity:"0.5"}),(0,t.jsx)("line",{x1:"22",y1:"34",x2:"36",y2:"34",opacity:"0.5"})]})});case"logs":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...r,children:[(0,t.jsx)("path",{d:"M18 12 h22 l8 8 v32 a2 2 0 0 1 -2 2 h-28 a2 2 0 0 1 -2 -2 v-38 a2 2 0 0 1 2 -2 z"}),(0,t.jsx)("path",{d:"M40 12 v8 h8",opacity:"0.6"}),(0,t.jsx)("line",{x1:"24",y1:"32",x2:"40",y2:"32",opacity:"0.55"}),(0,t.jsx)("line",{x1:"24",y1:"38",x2:"40",y2:"38",opacity:"0.4"}),(0,t.jsx)("line",{x1:"24",y1:"44",x2:"34",y2:"44",opacity:"0.25"})]})});case"tokens":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...r,children:[(0,t.jsx)("circle",{cx:"22",cy:"32",r:"8"}),(0,t.jsx)("line",{x1:"30",y1:"32",x2:"54",y2:"32"}),(0,t.jsx)("line",{x1:"44",y1:"32",x2:"44",y2:"38"}),(0,t.jsx)("line",{x1:"50",y1:"32",x2:"50",y2:"40"})]})});case"networks":return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...r,children:[(0,t.jsx)("circle",{cx:"32",cy:"32",r:"18"}),(0,t.jsx)("ellipse",{cx:"32",cy:"32",rx:"18",ry:"9",opacity:"0.55"}),(0,t.jsx)("line",{x1:"14",y1:"32",x2:"50",y2:"32",opacity:"0.55"}),(0,t.jsx)("line",{x1:"32",y1:"14",x2:"32",y2:"50",opacity:"0.55"})]})});default:return(0,t.jsx)("svg",{viewBox:"0 0 64 64",...a,children:(0,t.jsxs)("g",{...r,children:[(0,t.jsx)("circle",{cx:"32",cy:"32",r:"14",strokeDasharray:"3 3",opacity:"0.6"}),(0,t.jsx)("circle",{cx:"32",cy:"32",r:"3"})]})})}}function i({variant:e="generic",title:s,sub:o,cta:l,compact:c=!1}){let x=r[e],d=s??x.title,h=o??x.sub;return(0,t.jsxs)("div",{className:`text-center ${c?"py-8":"py-16"} px-4`,role:"status",children:[(0,t.jsx)("div",{className:"anet-empty-glyph inline-flex items-center justify-center mb-4 text-gray-500","aria-hidden":!0,children:(0,t.jsx)(n,{variant:e,size:c?40:56})}),(0,t.jsx)("h3",{className:`font-medium text-gray-300 ${c?"text-sm":"text-base"}`,children:d}),h&&(0,t.jsx)("p",{className:`text-gray-500 ${c?"text-xs mt-1.5":"text-sm mt-2"} max-w-md mx-auto leading-relaxed`,children:h}),l&&(0,t.jsx)("div",{className:"mt-4",children:l.href?(0,t.jsxs)(a.default,{href:l.href,className:"inline-flex items-center gap-1.5 text-sm font-medium text-cyan-400 hover:text-cyan-300",children:[l.label,(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]}):(0,t.jsxs)("button",{onClick:l.onClick,className:"inline-flex items-center gap-1.5 text-sm font-medium text-cyan-400 hover:text-cyan-300",children:[l.label,(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]})})]})}function o({cmd:e}){let[a,r]=(0,s.useState)(!1),n=async()=>{try{await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1800)}catch{}};return(0,t.jsxs)("div",{className:"anet-empty-cmd flex items-center gap-2 bg-[#0a0a15] border border-[#2a2a4a] rounded-lg pl-4 pr-1.5 py-1.5 text-xs sm:text-sm",children:[(0,t.jsx)("code",{className:"text-cyan-300 font-mono select-all",children:e}),(0,t.jsx)("button",{type:"button",onClick:n,"aria-label":a?"Copied":"Copy command",className:"shrink-0 rounded-md px-2 py-1.5 text-[11px] text-gray-500 hover:text-gray-200 hover:bg-[#1a1a2a] transition-colors",children:a?(0,t.jsxs)("span",{className:"flex items-center gap-1 text-green-400",children:[(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("path",{d:"M20 6 9 17l-5-5"})}),"Copied"]}):(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),(0,t.jsx)("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),"Copy"]})})]})}e.s(["EmptyState",0,i,"NodesEmptyState",0,function({hint:e}){return e?.global_count?(0,t.jsx)(i,{variant:"nodes",title:"No agents in this network",sub:`Server has ${e.global_count} nodes globally, but none are registered to the current network. Switch network or contact admin.`}):(0,t.jsxs)("div",{className:"text-center py-16 px-4",role:"status",children:[(0,t.jsx)("div",{className:"anet-empty-glyph inline-flex items-center justify-center mb-4 text-gray-500","aria-hidden":!0,children:(0,t.jsx)("svg",{viewBox:"0 0 64 64",width:56,height:56,children:(0,t.jsxs)("g",{stroke:"currentColor",strokeWidth:"1.5",fill:"none",children:[(0,t.jsx)("rect",{x:"10",y:"20",width:"44",height:"28",rx:"2"}),(0,t.jsx)("rect",{x:"20",y:"32",width:"6",height:"8",opacity:"0.5"}),(0,t.jsx)("rect",{x:"32",y:"32",width:"6",height:"8",opacity:"0.5"}),(0,t.jsx)("rect",{x:"44",y:"32",width:"4",height:"8",opacity:"0.5"}),(0,t.jsx)("line",{x1:"10",y1:"26",x2:"54",y2:"26",opacity:"0.4"}),(0,t.jsx)("circle",{cx:"14",cy:"23",r:"0.8",fill:"currentColor"})]})})}),(0,t.jsx)("h3",{className:"font-medium text-gray-300 text-base",children:"Spin up your first agent"}),(0,t.jsx)("p",{className:"text-gray-500 text-sm mt-2 max-w-md mx-auto leading-relaxed",children:"Run this in a fresh terminal to register an agent with this CommHub:"}),(0,t.jsx)("div",{className:"mt-4 inline-block",children:(0,t.jsx)(o,{cmd:"npx --yes @sleep2agi/agent-network init"})}),(0,t.jsx)("div",{className:"mt-3",children:(0,t.jsxs)("a",{href:"https://anet.sh",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1.5 text-xs font-medium text-gray-500 hover:text-cyan-300",children:["Full quickstart guide",(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]})})]})}])},28523,e=>{"use strict";var t=e.i(18050),s=e.i(71645),a=e.i(22016),r=e.i(18150),n=e.i(95356);e.s(["default",0,function(){let[e,i]=(0,s.useState)([]),[o,l]=(0,s.useState)(!0),[c,x]=(0,s.useState)(""),[d,h]=(0,s.useState)({}),m=(0,s.useCallback)(async()=>{try{let e=await fetch("/api/hub/tokens"),t=await e.json();i(t.tokens||[])}catch{}finally{l(!1)}},[]);(0,s.useEffect)(()=>{m()},[m]);let y=async()=>{if(c.trim())try{let e=sessionStorage.getItem("anet_v3_auth");if(!e)return;let{token:t}=JSON.parse(e),s=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create_token",token:t,name:c})}),a=await s.json();a.ok?(h({token:a.token}),x(""),m()):h({error:a.error})}catch{h({error:"Failed"})}},g=async e=>{try{let t=sessionStorage.getItem("anet_v3_auth");if(!t)return;let{token:s}=JSON.parse(t);await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"revoke_token",token:s,token_id:e})}),m()}catch{}};return(0,t.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,t.jsxs)("div",{className:"flex items-center gap-4 mb-6",children:[(0,t.jsx)(a.default,{href:"/settings",className:"text-gray-500 hover:text-gray-300 text-sm lg:ml-0 ml-10",children:"← Settings"}),(0,t.jsx)("h1",{className:"text-2xl font-bold text-white",children:"API Tokens"})]}),(0,t.jsxs)("div",{className:"max-w-2xl space-y-6",children:[(0,t.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Create Token"}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("input",{type:"text",value:c,onChange:e=>x(e.target.value),placeholder:"Token name (e.g. my-cli)",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,t.jsx)("button",{onClick:y,disabled:!c.trim(),className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 text-white text-sm rounded-lg transition-colors",children:"Create"})]}),d.token&&(0,t.jsxs)("div",{className:"mt-3 bg-green-500/5 border border-green-500/20 rounded-lg px-3 py-2",children:[(0,t.jsx)("div",{className:"text-xs text-green-400 mb-1",children:"Token created (copy now, shown only once):"}),(0,t.jsx)("code",{className:"text-sm text-green-300 break-all select-all",children:d.token})]}),d.error&&(0,t.jsx)("div",{className:"mt-2 text-xs text-red-400",children:d.error})]}),(0,t.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,t.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:["Active Tokens (",e.length,")"]}),o?(0,t.jsx)("div",{className:"animate-pulse space-y-2",children:[1,2].map(e=>(0,t.jsx)("div",{className:"h-12 bg-gray-800/20 rounded"},e))}):0===e.length?(0,t.jsx)(n.EmptyState,{variant:"tokens",compact:!0,sub:"Tokens authenticate CLI tools and external integrations. Sign in with V3 auth, then create one above."}):(0,t.jsx)("div",{className:"space-y-2",children:e.map(e=>(0,t.jsxs)("div",{className:"flex items-center justify-between bg-[#0a0a15] rounded-lg px-3 py-2 border border-[#1a1a2a]",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-sm text-white font-medium",children:e.name}),(0,t.jsx)("span",{className:`text-[10px] px-1.5 py-0.5 rounded border ${"full"===e.scope?"text-cyan-300 border-cyan-500/20 bg-cyan-500/5":"text-gray-400 border-gray-600/20"}`,children:e.scope})]}),(0,t.jsxs)("div",{className:"text-[10px] text-gray-500",children:[e.token_id," · network: ",e.network_id?.slice(0,12)||"--"," · used ",(0,r.timeAgo)(e.last_used_at)]})]}),(0,t.jsx)("button",{onClick:()=>g(e.token_id),className:"text-xs text-red-400 hover:text-red-300 px-2 py-1 rounded border border-red-800/30 hover:bg-red-500/10 transition-colors",children:"Revoke"})]},e.token_id))})]})]})]})}])}]);