@sleep2agi/agent-network-dashboard 0.5.3-preview.234 → 0.5.3-preview.236

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 (156) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +5 -5
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
  134. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  138. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  139. package/.next/server/middleware-build-manifest.js +3 -3
  140. package/.next/server/pages/404.html +2 -2
  141. package/.next/server/pages/500.html +1 -1
  142. package/.next/static/chunks/{0b7swqksmxx4d.js → 00blqs2oaaag1.js} +1 -1
  143. package/.next/static/chunks/{0r.u_oq5pe~z6.css → 0pe_uuf7xb81p.css} +1 -1
  144. package/.next/static/chunks/{05cc8e2y5~5z0.js → 11h~h3pfdl0fg.js} +1 -1
  145. package/.next/static/chunks/{0__rx-qgibs3h.js → 15w5c1nq63rq9.js} +1 -1
  146. package/.next/static/chunks/{0-l3_dnseuw3d.js → 16zkq380r_74..js} +2 -2
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +22 -2
  150. package/app/globals.css +76 -2
  151. package/package.json +1 -1
  152. package/scripts/topo-kicker-triple-axis-breath-test.mjs +118 -0
  153. package/scripts/topo-watermark-triple-axis-breath-test.mjs +124 -0
  154. /package/.next/static/{5ImJ7M0tzN5ebxpw_xGuQ → WYAuMkEsFDmtcHbTDRXKc}/_buildManifest.js +0 -0
  155. /package/.next/static/{5ImJ7M0tzN5ebxpw_xGuQ → WYAuMkEsFDmtcHbTDRXKc}/_clientMiddlewareManifest.js +0 -0
  156. /package/.next/static/{5ImJ7M0tzN5ebxpw_xGuQ → WYAuMkEsFDmtcHbTDRXKc}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":289,"timestamp":410330564981,"id":4,"parentId":1,"tags":{},"startTime":1779218302811,"traceId":"8a4903b991f71bec"},{"name":"load-custom-routes","duration":449,"timestamp":410330565425,"id":5,"parentId":1,"tags":{},"startTime":1779218302812,"traceId":"8a4903b991f71bec"},{"name":"create-dist-dir","duration":850,"timestamp":410330565915,"id":6,"parentId":1,"tags":{},"startTime":1779218302812,"traceId":"8a4903b991f71bec"},{"name":"clean","duration":33259,"timestamp":410330567467,"id":7,"parentId":1,"tags":{},"startTime":1779218302814,"traceId":"8a4903b991f71bec"},{"name":"discover-routes","duration":11087,"timestamp":410330704383,"id":8,"parentId":1,"tags":{},"startTime":1779218302951,"traceId":"8a4903b991f71bec"},{"name":"create-root-mapping","duration":111,"timestamp":410330715534,"id":9,"parentId":1,"tags":{},"startTime":1779218302962,"traceId":"8a4903b991f71bec"},{"name":"generate-route-types","duration":33678,"timestamp":410330718681,"id":10,"parentId":1,"tags":{},"startTime":1779218302965,"traceId":"8a4903b991f71bec"},{"name":"public-dir-conflict-check","duration":107,"timestamp":410330752466,"id":11,"parentId":1,"tags":{},"startTime":1779218302999,"traceId":"8a4903b991f71bec"},{"name":"generate-routes-manifest","duration":5254,"timestamp":410330752696,"id":12,"parentId":1,"tags":{},"startTime":1779218302999,"traceId":"8a4903b991f71bec"},{"name":"run-turbopack","duration":6322435,"timestamp":410330763244,"id":14,"parentId":1,"tags":{},"startTime":1779218303010,"traceId":"8a4903b991f71bec"},{"name":"turbopack-build-events","duration":85,"timestamp":410331058264,"id":15,"parentId":1,"tags":{},"startTime":1779218303305,"traceId":"8a4903b991f71bec"},{"name":"run-typescript","duration":10073151,"timestamp":410337101899,"id":16,"parentId":1,"tags":{},"startTime":1779218309348,"traceId":"8a4903b991f71bec"},{"name":"generate-required-server-files","duration":3518,"timestamp":410347176712,"id":18,"parentId":1,"tags":{},"startTime":1779218319423,"traceId":"8a4903b991f71bec"},{"name":"check-static-error-page","duration":15116,"timestamp":410347376252,"id":20,"parentId":19,"tags":{},"startTime":1779218319623,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":476020,"timestamp":410347395239,"id":65,"parentId":22,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":492020,"timestamp":410347379430,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779218319626,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":584397,"timestamp":410347396146,"id":71,"parentId":30,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":597442,"timestamp":410347383201,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779218319629,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":589702,"timestamp":410347395602,"id":68,"parentId":27,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":602615,"timestamp":410347382780,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779218319629,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":590199,"timestamp":410347396206,"id":72,"parentId":32,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":602850,"timestamp":410347383612,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779218319630,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":598433,"timestamp":410347395715,"id":69,"parentId":28,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":611319,"timestamp":410347382902,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779218319629,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":601573,"timestamp":410347396385,"id":73,"parentId":33,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":614293,"timestamp":410347383741,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779218319630,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":603112,"timestamp":410347396492,"id":75,"parentId":35,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":615696,"timestamp":410347383965,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779218319630,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":607774,"timestamp":410347396512,"id":76,"parentId":36,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":619852,"timestamp":410347384477,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779218319631,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":613812,"timestamp":410347396556,"id":78,"parentId":38,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":625611,"timestamp":410347384810,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779218319631,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":617426,"timestamp":410347395501,"id":67,"parentId":26,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":630320,"timestamp":410347382655,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779218319629,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":622178,"timestamp":410347396583,"id":80,"parentId":40,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":633777,"timestamp":410347385029,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779218319631,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":636219,"timestamp":410347396570,"id":79,"parentId":39,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":647942,"timestamp":410347384908,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779218319631,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":639930,"timestamp":410347396465,"id":74,"parentId":34,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":652597,"timestamp":410347383854,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779218319630,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":640084,"timestamp":410347396544,"id":77,"parentId":37,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":651989,"timestamp":410347384672,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779218319631,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":641427,"timestamp":410347396607,"id":82,"parentId":44,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":652267,"timestamp":410347385810,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779218319632,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":646010,"timestamp":410347396646,"id":85,"parentId":47,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":655144,"timestamp":410347387556,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779218319634,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":647223,"timestamp":410347396621,"id":83,"parentId":45,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":657967,"timestamp":410347385934,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779218319632,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":649805,"timestamp":410347394842,"id":64,"parentId":21,"tags":{},"startTime":1779218319641,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":666861,"timestamp":410347377832,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779218319624,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":650451,"timestamp":410347396658,"id":86,"parentId":48,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":659464,"timestamp":410347387689,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779218319634,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":656782,"timestamp":410347396672,"id":87,"parentId":49,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":665694,"timestamp":410347387809,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779218319634,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":656996,"timestamp":410347396694,"id":89,"parentId":51,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":665748,"timestamp":410347387983,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779218319634,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":646944,"timestamp":410347413692,"id":91,"parentId":31,"tags":{},"startTime":1779218319660,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":677361,"timestamp":410347383319,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779218319630,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":666929,"timestamp":410347395980,"id":70,"parentId":29,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":679906,"timestamp":410347383050,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779218319629,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":653945,"timestamp":410347412330,"id":90,"parentId":24,"tags":{},"startTime":1779218319659,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":686374,"timestamp":410347379943,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779218319626,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":652188,"timestamp":410347415987,"id":93,"parentId":43,"tags":{},"startTime":1779218319662,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":682708,"timestamp":410347385508,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779218319632,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":671855,"timestamp":410347396636,"id":84,"parentId":46,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":682484,"timestamp":410347386057,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779218319632,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":656820,"timestamp":410347414592,"id":92,"parentId":41,"tags":{},"startTime":1779218319661,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":686351,"timestamp":410347385127,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779218319631,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":684229,"timestamp":410347396597,"id":81,"parentId":42,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":695513,"timestamp":410347385365,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779218319632,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":698043,"timestamp":410347395396,"id":66,"parentId":25,"tags":{},"startTime":1779218319642,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":711225,"timestamp":410347382479,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779218319629,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":712973,"timestamp":410347418755,"id":96,"parentId":53,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":743254,"timestamp":410347388559,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779218319635,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":719751,"timestamp":410347418801,"id":100,"parentId":58,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":748682,"timestamp":410347389955,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779218319636,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":720703,"timestamp":410347418709,"id":94,"parentId":23,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":759757,"timestamp":410347379709,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779218319626,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":724818,"timestamp":410347418778,"id":98,"parentId":55,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":754749,"timestamp":410347388913,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779218319635,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":729172,"timestamp":410347418916,"id":101,"parentId":59,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":757955,"timestamp":410347390189,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779218319636,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":729408,"timestamp":410347418937,"id":102,"parentId":61,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":757584,"timestamp":410347390803,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779218319637,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":735729,"timestamp":410347418961,"id":104,"parentId":63,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":763633,"timestamp":410347391115,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779218319637,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":729575,"timestamp":410347427881,"id":105,"parentId":60,"tags":{},"startTime":1779218319674,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":767119,"timestamp":410347390379,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779218319637,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":738860,"timestamp":410347418947,"id":103,"parentId":62,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":766895,"timestamp":410347390949,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779218319637,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":721471,"timestamp":410347441039,"id":106,"parentId":57,"tags":{},"startTime":1779218319687,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":773142,"timestamp":410347389403,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779218319636,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":744627,"timestamp":410347418764,"id":97,"parentId":54,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":774715,"timestamp":410347388719,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779218319635,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":767765,"timestamp":410347396685,"id":88,"parentId":50,"tags":{},"startTime":1779218319643,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":776597,"timestamp":410347387895,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779218319634,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":763742,"timestamp":410347418740,"id":95,"parentId":52,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":794133,"timestamp":410347388405,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779218319635,"traceId":"8a4903b991f71bec"},{"name":"is-page-static","duration":773601,"timestamp":410347418791,"id":99,"parentId":56,"tags":{},"startTime":1779218319665,"traceId":"8a4903b991f71bec"},{"name":"check-page","duration":803304,"timestamp":410347389137,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779218319635,"traceId":"8a4903b991f71bec"},{"name":"static-check","duration":817365,"timestamp":410347375117,"id":19,"parentId":1,"tags":{},"startTime":1779218319621,"traceId":"8a4903b991f71bec"}]
2
- [{"name":"write-routes-manifest","duration":487,"timestamp":410348203577,"id":108,"parentId":1,"tags":{},"startTime":1779218320450,"traceId":"8a4903b991f71bec"},{"name":"load-dotenv","duration":63,"timestamp":410348214967,"id":111,"parentId":110,"tags":{},"startTime":1779218320461,"traceId":"8a4903b991f71bec"},{"name":"run-export-path-map","duration":619,"timestamp":410348217633,"id":112,"parentId":110,"tags":{},"startTime":1779218320464,"traceId":"8a4903b991f71bec"},{"name":"next-export","duration":604967,"timestamp":410348213737,"id":110,"parentId":1,"tags":{},"startTime":1779218320460,"traceId":"8a4903b991f71bec"},{"name":"move-exported-app-not-found-","duration":586,"timestamp":410348822516,"id":113,"parentId":109,"tags":{},"startTime":1779218321069,"traceId":"8a4903b991f71bec"},{"name":"move-exported-app-global-error-","duration":434,"timestamp":410348823203,"id":114,"parentId":109,"tags":{},"startTime":1779218321069,"traceId":"8a4903b991f71bec"},{"name":"static-generation","duration":617768,"timestamp":410348207803,"id":109,"parentId":1,"tags":{},"startTime":1779218320454,"traceId":"8a4903b991f71bec"},{"name":"write-routes-manifest","duration":433,"timestamp":410348825799,"id":115,"parentId":1,"tags":{},"startTime":1779218321072,"traceId":"8a4903b991f71bec"},{"name":"print-tree-view","duration":4806,"timestamp":410348836402,"id":116,"parentId":1,"tags":{},"startTime":1779218321083,"traceId":"8a4903b991f71bec"},{"name":"write-route-bundle-stats","duration":17401,"timestamp":410348841245,"id":117,"parentId":1,"tags":{},"startTime":1779218321088,"traceId":"8a4903b991f71bec"},{"name":"telemetry-flush","duration":43913,"timestamp":410348858683,"id":118,"parentId":1,"tags":{},"startTime":1779218321105,"traceId":"8a4903b991f71bec"},{"name":"next-build","duration":18394447,"timestamp":410330508191,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779218302754,"traceId":"8a4903b991f71bec"}]
1
+ [{"name":"generate-buildid","duration":317,"timestamp":411093025885,"id":4,"parentId":1,"tags":{},"startTime":1779219065272,"traceId":"604b55deb37e44d1"},{"name":"load-custom-routes","duration":512,"timestamp":411093026366,"id":5,"parentId":1,"tags":{},"startTime":1779219065273,"traceId":"604b55deb37e44d1"},{"name":"create-dist-dir","duration":758,"timestamp":411093026919,"id":6,"parentId":1,"tags":{},"startTime":1779219065273,"traceId":"604b55deb37e44d1"},{"name":"clean","duration":39316,"timestamp":411093028398,"id":7,"parentId":1,"tags":{},"startTime":1779219065275,"traceId":"604b55deb37e44d1"},{"name":"discover-routes","duration":11696,"timestamp":411093160737,"id":8,"parentId":1,"tags":{},"startTime":1779219065407,"traceId":"604b55deb37e44d1"},{"name":"create-root-mapping","duration":140,"timestamp":411093172508,"id":9,"parentId":1,"tags":{},"startTime":1779219065419,"traceId":"604b55deb37e44d1"},{"name":"generate-route-types","duration":39496,"timestamp":411093175196,"id":10,"parentId":1,"tags":{},"startTime":1779219065421,"traceId":"604b55deb37e44d1"},{"name":"public-dir-conflict-check","duration":101,"timestamp":411093214795,"id":11,"parentId":1,"tags":{},"startTime":1779219065461,"traceId":"604b55deb37e44d1"},{"name":"generate-routes-manifest","duration":5504,"timestamp":411093215023,"id":12,"parentId":1,"tags":{},"startTime":1779219065461,"traceId":"604b55deb37e44d1"},{"name":"run-turbopack","duration":7382412,"timestamp":411093226888,"id":14,"parentId":1,"tags":{},"startTime":1779219065473,"traceId":"604b55deb37e44d1"},{"name":"turbopack-build-events","duration":119,"timestamp":411093532702,"id":15,"parentId":1,"tags":{},"startTime":1779219065779,"traceId":"604b55deb37e44d1"},{"name":"run-typescript","duration":10710380,"timestamp":411100635374,"id":16,"parentId":1,"tags":{},"startTime":1779219072882,"traceId":"604b55deb37e44d1"},{"name":"generate-required-server-files","duration":2335,"timestamp":411111347022,"id":18,"parentId":1,"tags":{},"startTime":1779219083593,"traceId":"604b55deb37e44d1"},{"name":"check-static-error-page","duration":16824,"timestamp":411111547111,"id":20,"parentId":19,"tags":{},"startTime":1779219083793,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":497888,"timestamp":411111567781,"id":65,"parentId":22,"tags":{},"startTime":1779219083814,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":515331,"timestamp":411111550529,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779219083797,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":579334,"timestamp":411111568195,"id":69,"parentId":28,"tags":{},"startTime":1779219083814,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":593312,"timestamp":411111554312,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779219083801,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":594121,"timestamp":411111568710,"id":72,"parentId":32,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":607776,"timestamp":411111555140,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779219083801,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":610836,"timestamp":411111568876,"id":73,"parentId":33,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":624440,"timestamp":411111555345,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779219083802,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":625107,"timestamp":411111567958,"id":67,"parentId":26,"tags":{},"startTime":1779219083814,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":639130,"timestamp":411111554028,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779219083800,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":624466,"timestamp":411111568955,"id":74,"parentId":34,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":637973,"timestamp":411111555497,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779219083802,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":627713,"timestamp":411111568087,"id":68,"parentId":27,"tags":{},"startTime":1779219083814,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":641694,"timestamp":411111554166,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779219083800,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":631120,"timestamp":411111569024,"id":76,"parentId":36,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":643995,"timestamp":411111556195,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779219083802,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":634737,"timestamp":411111568481,"id":70,"parentId":29,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":648805,"timestamp":411111554466,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779219083801,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":635504,"timestamp":411111569069,"id":78,"parentId":38,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":648042,"timestamp":411111556572,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779219083803,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":642681,"timestamp":411111567875,"id":66,"parentId":25,"tags":{},"startTime":1779219083814,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":657895,"timestamp":411111553832,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779219083800,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":642829,"timestamp":411111569082,"id":79,"parentId":39,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":655248,"timestamp":411111556693,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779219083803,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":644645,"timestamp":411111567456,"id":64,"parentId":21,"tags":{},"startTime":1779219083814,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":663287,"timestamp":411111548839,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779219083795,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":644448,"timestamp":411111569093,"id":80,"parentId":40,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":656773,"timestamp":411111556808,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779219083803,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":648574,"timestamp":411111569141,"id":84,"parentId":46,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":659756,"timestamp":411111557999,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779219083804,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":654359,"timestamp":411111569152,"id":85,"parentId":47,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":665401,"timestamp":411111558157,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779219083804,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":660481,"timestamp":411111569165,"id":86,"parentId":48,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":670065,"timestamp":411111559639,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779219083806,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":670986,"timestamp":411111568985,"id":75,"parentId":35,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":684396,"timestamp":411111555644,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779219083802,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":671128,"timestamp":411111569057,"id":77,"parentId":37,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":683794,"timestamp":411111556419,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779219083803,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":689206,"timestamp":411111569113,"id":82,"parentId":44,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":700677,"timestamp":411111557726,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779219083804,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":689395,"timestamp":411111569178,"id":87,"parentId":49,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":698628,"timestamp":411111559977,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779219083806,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":689551,"timestamp":411111569187,"id":88,"parentId":50,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":698634,"timestamp":411111560130,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779219083806,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":689869,"timestamp":411111569199,"id":89,"parentId":51,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":698881,"timestamp":411111560244,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779219083807,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":692470,"timestamp":411111568640,"id":71,"parentId":30,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":706532,"timestamp":411111554647,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779219083801,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":690108,"timestamp":411111576270,"id":93,"parentId":43,"tags":{},"startTime":1779219083823,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":709041,"timestamp":411111557387,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779219083804,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":693880,"timestamp":411111574909,"id":92,"parentId":41,"tags":{},"startTime":1779219083821,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":711924,"timestamp":411111556921,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779219083803,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":707220,"timestamp":411111573859,"id":91,"parentId":31,"tags":{},"startTime":1779219083820,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":726342,"timestamp":411111554798,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779219083801,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":713167,"timestamp":411111569128,"id":83,"parentId":45,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":724490,"timestamp":411111557875,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779219083804,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":720379,"timestamp":411111569101,"id":81,"parentId":42,"tags":{},"startTime":1779219083815,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":732316,"timestamp":411111557219,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779219083803,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":708677,"timestamp":411111582794,"id":98,"parentId":55,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":730289,"timestamp":411111561278,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779219083808,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":720201,"timestamp":411111572680,"id":90,"parentId":24,"tags":{},"startTime":1779219083819,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":741841,"timestamp":411111551092,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779219083797,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":733956,"timestamp":411111582816,"id":100,"parentId":58,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":754426,"timestamp":411111562423,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779219083809,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":754451,"timestamp":411111582988,"id":102,"parentId":61,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":774214,"timestamp":411111563319,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779219083810,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":755043,"timestamp":411111582766,"id":96,"parentId":53,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":776997,"timestamp":411111560858,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779219083807,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":756623,"timestamp":411111582754,"id":95,"parentId":52,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":778769,"timestamp":411111560670,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779219083807,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":762806,"timestamp":411111583028,"id":104,"parentId":63,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":782242,"timestamp":411111563650,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779219083810,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":747932,"timestamp":411111599223,"id":105,"parentId":57,"tags":{},"startTime":1779219083846,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":785420,"timestamp":411111561775,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779219083808,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":770616,"timestamp":411111582999,"id":103,"parentId":62,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":790161,"timestamp":411111563495,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779219083810,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":772678,"timestamp":411111582780,"id":97,"parentId":54,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":794455,"timestamp":411111561048,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779219083807,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":775101,"timestamp":411111582807,"id":99,"parentId":56,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":796434,"timestamp":411111561517,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779219083808,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":749528,"timestamp":411111608965,"id":106,"parentId":60,"tags":{},"startTime":1779219083855,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":795688,"timestamp":411111562846,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779219083809,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":776879,"timestamp":411111582722,"id":94,"parentId":23,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":808837,"timestamp":411111550809,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779219083797,"traceId":"604b55deb37e44d1"},{"name":"is-page-static","duration":791955,"timestamp":411111582964,"id":101,"parentId":59,"tags":{},"startTime":1779219083829,"traceId":"604b55deb37e44d1"},{"name":"check-page","duration":812322,"timestamp":411111562647,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779219083809,"traceId":"604b55deb37e44d1"},{"name":"static-check","duration":829154,"timestamp":411111545882,"id":19,"parentId":1,"tags":{},"startTime":1779219083792,"traceId":"604b55deb37e44d1"}]
2
+ [{"name":"write-routes-manifest","duration":539,"timestamp":411112387875,"id":108,"parentId":1,"tags":{},"startTime":1779219084634,"traceId":"604b55deb37e44d1"},{"name":"load-dotenv","duration":49,"timestamp":411112400519,"id":111,"parentId":110,"tags":{},"startTime":1779219084647,"traceId":"604b55deb37e44d1"},{"name":"run-export-path-map","duration":516,"timestamp":411112403342,"id":112,"parentId":110,"tags":{},"startTime":1779219084650,"traceId":"604b55deb37e44d1"},{"name":"next-export","duration":673042,"timestamp":411112399261,"id":110,"parentId":1,"tags":{},"startTime":1779219084646,"traceId":"604b55deb37e44d1"},{"name":"move-exported-app-not-found-","duration":724,"timestamp":411113075965,"id":113,"parentId":109,"tags":{},"startTime":1779219085322,"traceId":"604b55deb37e44d1"},{"name":"move-exported-app-global-error-","duration":611,"timestamp":411113076802,"id":114,"parentId":109,"tags":{},"startTime":1779219085323,"traceId":"604b55deb37e44d1"},{"name":"static-generation","duration":687099,"timestamp":411112393040,"id":109,"parentId":1,"tags":{},"startTime":1779219084639,"traceId":"604b55deb37e44d1"},{"name":"write-routes-manifest","duration":396,"timestamp":411113080409,"id":115,"parentId":1,"tags":{},"startTime":1779219085327,"traceId":"604b55deb37e44d1"},{"name":"print-tree-view","duration":4788,"timestamp":411113099827,"id":116,"parentId":1,"tags":{},"startTime":1779219085346,"traceId":"604b55deb37e44d1"},{"name":"write-route-bundle-stats","duration":15080,"timestamp":411113104662,"id":117,"parentId":1,"tags":{},"startTime":1779219085351,"traceId":"604b55deb37e44d1"},{"name":"telemetry-flush","duration":21637,"timestamp":411113119778,"id":118,"parentId":1,"tags":{},"startTime":1779219085366,"traceId":"604b55deb37e44d1"},{"name":"next-build","duration":20171551,"timestamp":411092969895,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779219065216,"traceId":"604b55deb37e44d1"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6322435,"timestamp":410330763244,"id":14,"parentId":1,"tags":{},"startTime":1779218303010,"traceId":"8a4903b991f71bec"},{"name":"turbopack-build-events","duration":85,"timestamp":410331058264,"id":15,"parentId":1,"tags":{},"startTime":1779218303305,"traceId":"8a4903b991f71bec"},{"name":"run-typescript","duration":10073151,"timestamp":410337101899,"id":16,"parentId":1,"tags":{},"startTime":1779218309348,"traceId":"8a4903b991f71bec"},{"name":"static-check","duration":817365,"timestamp":410347375117,"id":19,"parentId":1,"tags":{},"startTime":1779218319621,"traceId":"8a4903b991f71bec"},{"name":"static-generation","duration":617768,"timestamp":410348207803,"id":109,"parentId":1,"tags":{},"startTime":1779218320454,"traceId":"8a4903b991f71bec"},{"name":"telemetry-flush","duration":43913,"timestamp":410348858683,"id":118,"parentId":1,"tags":{},"startTime":1779218321105,"traceId":"8a4903b991f71bec"},{"name":"next-build","duration":18394447,"timestamp":410330508191,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779218302754,"traceId":"8a4903b991f71bec"}]
1
+ [{"name":"run-turbopack","duration":7382412,"timestamp":411093226888,"id":14,"parentId":1,"tags":{},"startTime":1779219065473,"traceId":"604b55deb37e44d1"},{"name":"turbopack-build-events","duration":119,"timestamp":411093532702,"id":15,"parentId":1,"tags":{},"startTime":1779219065779,"traceId":"604b55deb37e44d1"},{"name":"run-typescript","duration":10710380,"timestamp":411100635374,"id":16,"parentId":1,"tags":{},"startTime":1779219072882,"traceId":"604b55deb37e44d1"},{"name":"static-check","duration":829154,"timestamp":411111545882,"id":19,"parentId":1,"tags":{},"startTime":1779219083792,"traceId":"604b55deb37e44d1"},{"name":"static-generation","duration":687099,"timestamp":411112393040,"id":109,"parentId":1,"tags":{},"startTime":1779219084639,"traceId":"604b55deb37e44d1"},{"name":"telemetry-flush","duration":21637,"timestamp":411113119778,"id":118,"parentId":1,"tags":{},"startTime":1779219085366,"traceId":"604b55deb37e44d1"},{"name":"next-build","duration":20171551,"timestamp":411092969895,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779219065216,"traceId":"604b55deb37e44d1"}]
@@ -4921,11 +4921,20 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4921
4921
  produce full breath-family map (cadences + axes)
4922
4922
  - Future rounds: when adding a new dual-axis to an
4923
4923
  existing breath anchor, append to this list */
4924
+ /* Round 721 / Loop — kicker entry promoted from dual-axis to
4925
+ TRIPLE-axis. R699 opacity + R714 transform-scale joined
4926
+ by R721 text-shadow at the same 6 s cadence. The catalog
4927
+ attribute name stays "dual-axis-surfaces" for back-compat
4928
+ (consumers querying `*='"kicker"'` continue to work) but
4929
+ the axes array now lists 3 entries. R721 widens the test
4930
+ to allow axes.length 2..3 and to recognise "text-shadow"
4931
+ alongside the prior 2nd-axis taxonomy. Future polysemic
4932
+ surfaces (3+ axes) append in the same shape. */
4924
4933
  data-topo-respiratory-dual-axis-surfaces={JSON.stringify([
4925
- { anchor: "kicker", cadence_s: 6, axes: ["opacity", "transform-scale"] },
4934
+ { anchor: "kicker", cadence_s: 6, axes: ["opacity", "transform-scale", "text-shadow"] },
4926
4935
  { anchor: "zoom-level", cadence_s: 9, axes: ["opacity", "transform-scale"] },
4927
4936
  { anchor: "H2", cadence_s: 10, axes: ["opacity", "transform-scale"] },
4928
- { anchor: "watermark", cadence_s: 6, axes: ["opacity", "letter-spacing"] },
4937
+ { anchor: "watermark", cadence_s: 6, axes: ["opacity", "letter-spacing", "text-shadow"] },
4929
4938
  { anchor: "recent", cadence_s: 8, axes: ["opacity", "font-size"] },
4930
4939
  { anchor: "legend", cadence_s: 8, axes: ["opacity", "font-size"] },
4931
4940
  ])}
@@ -15750,6 +15759,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
15750
15759
  opacity="0.4"
15751
15760
  data-topo-brand-watermark
15752
15761
  data-topo-brand-watermark-breath={reducedMotion ? 'false' : 'true'}
15762
+ /* Round 722 / Loop — watermark promoted to 2ND triple-axis
15763
+ surface. CSS text-shadow axis joins the SMIL opacity (R519)
15764
+ + SMIL letter-spacing (R712) axes — all 3 at 6 s in phase.
15765
+ Mirrors R721 kicker; together they form the "6 s triple-
15766
+ axis pair", the first multi-member triple-axis structural
15767
+ pattern in the family. Gated by reducedMotion at the JSX
15768
+ level (sibling to the SMIL <animate> children below) so
15769
+ the CSS animation has the same a11y guard. See globals.css
15770
+ R722 block for glow tuning rationale. */
15771
+ data-topo-brand-watermark-glow-breath={reducedMotion ? 'false' : '6s'}
15772
+ className={reducedMotion ? undefined : 'anet-topo-brand-watermark-glow-breath'}
15753
15773
  style={{ pointerEvents: 'none', transition: 'fill 200ms ease-out' }}
15754
15774
  >sleep2agi{!reducedMotion && (
15755
15775
  <animate attributeName="opacity" values="0.32;0.48;0.32" dur="6s" repeatCount="indefinite" />
package/app/globals.css CHANGED
@@ -1311,9 +1311,83 @@ body {
1311
1311
  transform-origin defaults to center — kicker scales around its own
1312
1312
  midpoint, no glyph drift. paint-only → flex parent stable → topo-
1313
1313
  overlap-test untouched. prefers-reduced-motion: reduce neutralizes. */
1314
+ /* Round 722 — watermark text becomes the 2ND TRIPLE-axis surface,
1315
+ completing a "6 s triple-axis PAIR" with R721 kicker (both at the
1316
+ fastest dual-axis cadence, both with sparse hover signatures, both
1317
+ read-target text — symmetric structural mirror).
1318
+
1319
+ The watermark's prior axes:
1320
+ R519 SMIL opacity (6 s, 0.32 ↔ 0.48)
1321
+ R712 SMIL letter-spacing (6 s, 0.45 ↔ 0.55)
1322
+ R722 adds a 3rd CSS-animated axis on the SAME `<text>` element:
1323
+ R722 CSS text-shadow (6 s, none ↔ 0 0 8 px rgba(34, 211, 238, 0.20))
1324
+
1325
+ The SMIL animations (opacity + letter-spacing) drive SVG attributes
1326
+ in their own clock; the CSS animation drives `text-shadow` as a CSS
1327
+ property. SVG <text> in modern browsers honours both vocabularies
1328
+ on the same element — no conflict. The 6 s cadence shared across
1329
+ all 3 axes keeps them in phase: at the dimmest+tightest moment the
1330
+ glow appears; at the brightest+widest moment the glow is gone. One
1331
+ coherent inhale-exhale.
1332
+
1333
+ Glow tuning vs kicker (R721):
1334
+ kicker blur 6 px, alpha 0.30
1335
+ watermark blur 8 px, alpha 0.20
1336
+ The watermark text sits at canvas bottom-left at fontSize 11 with
1337
+ a base opacity of 0.4 (R282) — the glow needs more spread (8 vs 6)
1338
+ to register at that low base opacity, but less alpha (0.20 vs 0.30)
1339
+ to stay proportional to the wordmark's quieter visual register.
1340
+
1341
+ Gating: piggybacks on the existing R519 reducedMotion JSX gate
1342
+ (the entire <animate> tree only mounts when !reducedMotion). When
1343
+ reducedMotion is true the class is still applied but the @media
1344
+ (prefers-reduced-motion: reduce) below neutralises the CSS
1345
+ animation. Belt-and-suspenders. */
1346
+ @keyframes anet-topo-brand-watermark-glow-breath-kf {
1347
+ 0%, 100% { text-shadow: none; }
1348
+ 50% { text-shadow: 0 0 8px rgba(34, 211, 238, 0.20); }
1349
+ }
1350
+ .anet-topo-brand-watermark-glow-breath {
1351
+ animation: anet-topo-brand-watermark-glow-breath-kf 6s ease-in-out infinite;
1352
+ }
1353
+ @media (prefers-reduced-motion: reduce) {
1354
+ .anet-topo-brand-watermark-glow-breath { animation: none; }
1355
+ }
1356
+
1357
+ /* Round 721 — kicker becomes the family's first TRIPLE-axis breath
1358
+ surface. R699 opacity (6 s) + R714 transform-scale (6 s) joined by
1359
+ R721 text-shadow (6 s) — all 3 axes share the 6 s cadence in phase.
1360
+
1361
+ At rest peak (0%, 100%) the kicker reads as a static title;
1362
+ at mid-breath (50%) it dims (0.78), retracts (scale 0.995), AND
1363
+ emits a soft cyan glow (text-shadow 0 0 6px rgba(34, 211, 238, 0.30)).
1364
+ The glow appears OUT-OF-PHASE with the dim — as the text shrinks
1365
+ slightly it gains a subtle aura. Reads as an "inhale glow": a small
1366
+ visible payoff at the bottom of the breath cycle.
1367
+
1368
+ Why kicker first (vs other dual-axis surfaces):
1369
+ - kicker has the SPARSEST hover signature in the family — being
1370
+ below H2 (the page heading), it's read-target text, not an
1371
+ interactive surface. The breath family's "if hover sig sparse,
1372
+ dual-axis; if hover sig rich, single-axis" budget rule extends
1373
+ naturally to "if hover sig SPARSE, can go triple-axis".
1374
+ - 6 s is the fastest dual-axis cadence in the rolodex — at fast
1375
+ cadence the 3rd axis (a glow appear+disappear cycle every 3 s
1376
+ on each half) registers as ambient rhythm, not a distraction.
1377
+
1378
+ text-shadow chosen over letter-spacing or font-size because:
1379
+ - text-shadow doesn't reflow text (no horizontal motion)
1380
+ - glow against the dark canvas reads clearly without competing
1381
+ with the opacity dim
1382
+ - cyan tint at 30% alpha + 6 px blur is below the brightness
1383
+ threshold of any node halo (R674/R675 nodes use 0.5+ alpha)
1384
+
1385
+ Composition note: the R29 prefers-reduced-motion guard already
1386
+ neutralizes the entire 6 s animation; no separate text-shadow
1387
+ reduced-motion logic needed. */
1314
1388
  @keyframes anet-topo-kicker-breath-kf {
1315
- 0%, 100% { opacity: 1; transform: scale(1); }
1316
- 50% { opacity: 0.78; transform: scale(0.995); }
1389
+ 0%, 100% { opacity: 1; transform: scale(1); text-shadow: none; }
1390
+ 50% { opacity: 0.78; transform: scale(0.995); text-shadow: 0 0 6px rgba(34, 211, 238, 0.30); }
1317
1391
  }
1318
1392
  .anet-topo-kicker-breath {
1319
1393
  animation: anet-topo-kicker-breath-kf 6s ease-in-out infinite;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.234",
3
+ "version": "0.5.3-preview.236",
4
4
  "description": "Agent Network Dashboard \u2014 Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,118 @@
1
+ /* Round 721 — kicker promoted from dual-axis to TRIPLE-axis breath.
2
+ * R699 opacity (6 s) + R714 transform-scale (6 s) joined by R721
3
+ * text-shadow (6 s) — all 3 axes share the 6 s cadence in phase.
4
+ * First triple-axis surface in the family.
5
+ *
6
+ * Glow specification: at mid-breath (50%) the kicker emits
7
+ * text-shadow: 0 0 6px rgba(34, 211, 238, 0.30). Reads as an "inhale
8
+ * glow" — a subtle cyan aura appears as the text dims and shrinks.
9
+ *
10
+ * Assertions:
11
+ * - CSS keyframes 0%/100% has text-shadow: none
12
+ * - CSS keyframes 50% has text-shadow: 0 0 6px rgba(34, 211, 238, 0.30)
13
+ * - existing opacity (1 ↔ 0.78) + transform-scale (1 ↔ 0.995) axes
14
+ * preserved in same @keyframes block (R699 + R714 still composing)
15
+ * - .anet-topo-kicker-breath rule still binds 6 s cadence
16
+ * - prefers-reduced-motion guard still present
17
+ * - runtime kicker has the breath class + 6s data attr (preserved)
18
+ * - R716 catalog kicker entry axes = ["opacity", "transform-scale", "text-shadow"]
19
+ * - kicker is the ONLY entry with 3 axes (first triple-axis surface)
20
+ * - text-shadow appears nowhere else in the catalog (kicker exclusive)
21
+ */
22
+ import { chromium } from 'playwright';
23
+ import { readFileSync } from 'node:fs';
24
+
25
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
26
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
27
+
28
+ const browser = await chromium.launch({ headless: true });
29
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
30
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
31
+ await ctx.addInitScript(() => {
32
+ try {
33
+ localStorage.setItem('anet-theme', 'cyber');
34
+ localStorage.setItem('anet-topo-layout', 'ring');
35
+ sessionStorage.setItem('anet_v3_auth', '1');
36
+ } catch {}
37
+ });
38
+ await ctx.route('**/api/hub/status*', async (route) => {
39
+ const r = await route.fetch();
40
+ const b = await r.json();
41
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
42
+ const mk = (alias) => ({
43
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
44
+ network_id: nid, project_dir: null,
45
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
46
+ });
47
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
48
+ });
49
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
50
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
51
+ const page = await ctx.newPage();
52
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
53
+ await page.waitForSelector('.anet-topo-kicker-breath', { timeout: 15000, state: 'attached' });
54
+ await page.waitForTimeout(300);
55
+
56
+ const runtimeState = await page.evaluate(() => {
57
+ const kicker = document.querySelector('.anet-topo-kicker-breath');
58
+ if (!kicker) return null;
59
+ const cs = getComputedStyle(kicker);
60
+ const svg = document.querySelector('[data-topo-canvas-aria]');
61
+ return {
62
+ has_class: kicker.classList.contains('anet-topo-kicker-breath'),
63
+ breath_attr: kicker.getAttribute('data-topo-section-kicker-breath'),
64
+ anim_name: cs.animationName,
65
+ anim_duration: cs.animationDuration,
66
+ catalog: svg?.getAttribute('data-topo-respiratory-dual-axis-surfaces') ?? null,
67
+ };
68
+ });
69
+
70
+ await browser.close();
71
+
72
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
73
+ // 0%/100% keyframe must include text-shadow: none + opacity:1 + transform: scale(1)
74
+ const cssKf0_Triple = /@keyframes anet-topo-kicker-breath-kf\s*\{[\s\S]*?0%,\s*100%\s*\{[\s\S]*?opacity:\s*1[\s\S]*?transform:\s*scale\(1\)[\s\S]*?text-shadow:\s*none[\s\S]*?\}/.test(cssSrc);
75
+ // 50% keyframe must include text-shadow: 0 0 6px rgba(34, 211, 238, 0.30) + dim opacity + retract scale
76
+ const cssKf50_Triple = /@keyframes anet-topo-kicker-breath-kf\s*\{[\s\S]*?50%\s*\{[\s\S]*?opacity:\s*0\.78[\s\S]*?transform:\s*scale\(0\.995\)[\s\S]*?text-shadow:\s*0\s+0\s+6px\s+rgba\(34,\s*211,\s*238,\s*0\.30\)/.test(cssSrc);
77
+ const cssClassBound6s = /\.anet-topo-kicker-breath\s*\{[\s\S]*?animation:\s*anet-topo-kicker-breath-kf\s+6s\s+ease-in-out\s+infinite/.test(cssSrc);
78
+ const cssReducedMotion = /@media\s*\(prefers-reduced-motion:\s*reduce\)\s*\{[\s\S]*?\.anet-topo-kicker-breath\s*\{\s*animation:\s*none/.test(cssSrc);
79
+
80
+ const runtimeAnim = runtimeState?.anim_name === 'anet-topo-kicker-breath-kf' || runtimeState?.anim_name === 'none';
81
+
82
+ let catalog = null;
83
+ try { catalog = JSON.parse(runtimeState?.catalog ?? ''); } catch {}
84
+ const kickerEntry = Array.isArray(catalog) ? catalog.find(e => e.anchor === 'kicker') : null;
85
+ const kickerTripleAxes = !!kickerEntry
86
+ && Array.isArray(kickerEntry.axes)
87
+ && kickerEntry.axes.length === 3
88
+ && JSON.stringify(kickerEntry.axes) === JSON.stringify(['opacity', 'transform-scale', 'text-shadow']);
89
+
90
+ const tripleAxisSurfaces = Array.isArray(catalog)
91
+ ? catalog.filter(e => Array.isArray(e.axes) && e.axes.length === 3)
92
+ : [];
93
+ const onlyKickerTriple = tripleAxisSurfaces.length === 1 && tripleAxisSurfaces[0]?.anchor === 'kicker';
94
+
95
+ const textShadowSurfaces = Array.isArray(catalog)
96
+ ? catalog.filter(e => Array.isArray(e.axes) && e.axes.includes('text-shadow'))
97
+ : [];
98
+ const textShadowKickerExclusive = textShadowSurfaces.length === 1 && textShadowSurfaces[0]?.anchor === 'kicker';
99
+
100
+ const results = {
101
+ kicker_present: !!runtimeState,
102
+ has_breath_class: runtimeState?.has_class === true,
103
+ breath_cadence_attr_6s: runtimeState?.breath_attr === '6s',
104
+ runtime_anim_kicker_kf: runtimeAnim,
105
+ css_0_100_triple_axis: cssKf0_Triple,
106
+ css_50_triple_axis_with_glow: cssKf50_Triple,
107
+ css_class_binds_6s: cssClassBound6s,
108
+ css_reduced_motion_guard: cssReducedMotion,
109
+ catalog_kicker_three_axes: kickerTripleAxes,
110
+ only_kicker_is_triple_axis: onlyKickerTriple,
111
+ text_shadow_exclusive_to_kicker: textShadowKickerExclusive,
112
+ };
113
+ const ok = Object.values(results).every(Boolean);
114
+ console.log(`${ok ? '✅' : '❌'} R721 kicker triple-axis breath (first 3-axis surface: opacity + transform-scale + text-shadow @ 6s):`,
115
+ JSON.stringify(results, null, 2),
116
+ `\n kicker entry: ${JSON.stringify(kickerEntry)}`,
117
+ `\n runtime: ${JSON.stringify({ anim_name: runtimeState?.anim_name, anim_duration: runtimeState?.anim_duration })}`);
118
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,124 @@
1
+ /* Round 722 — watermark becomes the 2ND triple-axis breath surface.
2
+ * R519 SMIL opacity + R712 SMIL letter-spacing joined by R722 CSS
3
+ * text-shadow — all 3 axes at 6 s in phase. Together with R721 kicker
4
+ * they form the "6 s triple-axis PAIR" — the first multi-member
5
+ * triple-axis structural pattern in the family.
6
+ *
7
+ * Tuning vs kicker: blur 8px (vs 6px), alpha 0.20 (vs 0.30) — wider
8
+ * spread + lower alpha to register at the watermark's quieter base
9
+ * opacity (0.4 from R282) without overpowering.
10
+ *
11
+ * Assertions:
12
+ * - CSS keyframes 0%/100% has text-shadow: none
13
+ * - CSS keyframes 50% has text-shadow: 0 0 8px rgba(34, 211, 238, 0.20)
14
+ * - .anet-topo-brand-watermark-glow-breath rule binds 6s cadence
15
+ * - prefers-reduced-motion guard present
16
+ * - runtime watermark <text> has the glow class
17
+ * - runtime glow-breath data-attr = "6s" (or "false" if reducedMotion)
18
+ * - existing R519 SMIL opacity animate child still present (regression)
19
+ * - existing R712 SMIL letter-spacing animate child still present (regression)
20
+ * - R716 catalog watermark entry axes = ["opacity", "letter-spacing", "text-shadow"]
21
+ * - 2 surfaces now triple-axis (kicker + watermark) — 6s triple-axis PAIR
22
+ */
23
+ import { chromium } from 'playwright';
24
+ import { readFileSync } from 'node:fs';
25
+
26
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
27
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
28
+
29
+ const browser = await chromium.launch({ headless: true });
30
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
31
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
32
+ await ctx.addInitScript(() => {
33
+ try {
34
+ localStorage.setItem('anet-theme', 'cyber');
35
+ localStorage.setItem('anet-topo-layout', 'ring');
36
+ sessionStorage.setItem('anet_v3_auth', '1');
37
+ } catch {}
38
+ });
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: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
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: [mk('a·1'), mk('a·2')] } });
49
+ });
50
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
51
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
52
+ const page = await ctx.newPage();
53
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
54
+ await page.waitForSelector('[data-topo-brand-watermark]', { timeout: 15000, state: 'attached' });
55
+ await page.waitForTimeout(300);
56
+
57
+ const runtimeState = await page.evaluate(() => {
58
+ const wm = document.querySelector('[data-topo-brand-watermark]');
59
+ if (!wm) return null;
60
+ const cs = getComputedStyle(wm);
61
+ const smilOpacity = wm.querySelector('animate[attributeName="opacity"]');
62
+ const smilLetterSpace = wm.querySelector('animate[attributeName="letter-spacing"]');
63
+ const svg = document.querySelector('[data-topo-canvas-aria]');
64
+ return {
65
+ has_glow_class: wm.classList.contains('anet-topo-brand-watermark-glow-breath'),
66
+ glow_attr: wm.getAttribute('data-topo-brand-watermark-glow-breath'),
67
+ anim_name: cs.animationName,
68
+ anim_duration: cs.animationDuration,
69
+ smil_opacity_present: !!smilOpacity,
70
+ smil_opacity_dur: smilOpacity?.getAttribute('dur'),
71
+ smil_letter_present: !!smilLetterSpace,
72
+ smil_letter_dur: smilLetterSpace?.getAttribute('dur'),
73
+ catalog: svg?.getAttribute('data-topo-respiratory-dual-axis-surfaces') ?? null,
74
+ };
75
+ });
76
+
77
+ await browser.close();
78
+
79
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
80
+ const cssKfNone = /@keyframes anet-topo-brand-watermark-glow-breath-kf\s*\{[\s\S]*?0%,\s*100%\s*\{[\s\S]*?text-shadow:\s*none/.test(cssSrc);
81
+ const cssKfGlow = /@keyframes anet-topo-brand-watermark-glow-breath-kf\s*\{[\s\S]*?50%\s*\{[\s\S]*?text-shadow:\s*0\s+0\s+8px\s+rgba\(34,\s*211,\s*238,\s*0\.20\)/.test(cssSrc);
82
+ const cssClassBound6s = /\.anet-topo-brand-watermark-glow-breath\s*\{[\s\S]*?animation:\s*anet-topo-brand-watermark-glow-breath-kf\s+6s\s+ease-in-out\s+infinite/.test(cssSrc);
83
+ const cssReducedMotion = /@media\s*\(prefers-reduced-motion:\s*reduce\)\s*\{[\s\S]*?\.anet-topo-brand-watermark-glow-breath\s*\{\s*animation:\s*none/.test(cssSrc);
84
+
85
+ const runtimeAnimOk = runtimeState?.anim_name === 'anet-topo-brand-watermark-glow-breath-kf' || runtimeState?.anim_name === 'none';
86
+
87
+ let catalog = null;
88
+ try { catalog = JSON.parse(runtimeState?.catalog ?? ''); } catch {}
89
+ const wmEntry = Array.isArray(catalog) ? catalog.find(e => e.anchor === 'watermark') : null;
90
+ const wmTripleAxes = !!wmEntry
91
+ && Array.isArray(wmEntry.axes)
92
+ && wmEntry.axes.length === 3
93
+ && JSON.stringify(wmEntry.axes) === JSON.stringify(['opacity', 'letter-spacing', 'text-shadow']);
94
+
95
+ const tripleAxisSurfaces = Array.isArray(catalog)
96
+ ? catalog.filter(e => Array.isArray(e.axes) && e.axes.length === 3)
97
+ : [];
98
+ const tripleAxisAnchorsSorted = tripleAxisSurfaces.map(e => e.anchor).sort();
99
+ const triple6sPair =
100
+ tripleAxisSurfaces.length === 2
101
+ && JSON.stringify(tripleAxisAnchorsSorted) === JSON.stringify(['kicker', 'watermark'])
102
+ && tripleAxisSurfaces.every(e => e.cadence_s === 6);
103
+
104
+ const results = {
105
+ watermark_present: !!runtimeState,
106
+ has_glow_class: runtimeState?.has_glow_class === true,
107
+ glow_attr_6s: runtimeState?.glow_attr === '6s',
108
+ runtime_anim_kf: runtimeAnimOk,
109
+ css_keyframes_norm_none: cssKfNone,
110
+ css_keyframes_mid_glow: cssKfGlow,
111
+ css_class_binds_6s: cssClassBound6s,
112
+ css_reduced_motion_guard: cssReducedMotion,
113
+ r519_smil_opacity_kept: runtimeState?.smil_opacity_present === true && runtimeState?.smil_opacity_dur === '6s',
114
+ r712_smil_letter_kept: runtimeState?.smil_letter_present === true && runtimeState?.smil_letter_dur === '6s',
115
+ catalog_watermark_three_axes: wmTripleAxes,
116
+ triple_axis_pair_6s: triple6sPair,
117
+ };
118
+ const ok = Object.values(results).every(Boolean);
119
+ console.log(`${ok ? '✅' : '❌'} R722 watermark triple-axis breath (2nd triple-axis surface, 6s triple-axis PAIR with kicker):`,
120
+ JSON.stringify(results, null, 2),
121
+ `\n watermark entry: ${JSON.stringify(wmEntry)}`,
122
+ `\n triple-axis surfaces: ${JSON.stringify(tripleAxisAnchorsSorted)}`,
123
+ `\n runtime: ${JSON.stringify({ anim_name: runtimeState?.anim_name, anim_duration: runtimeState?.anim_duration, smil_opacity: runtimeState?.smil_opacity_dur, smil_letter: runtimeState?.smil_letter_dur })}`);
124
+ process.exit(ok ? 0 : 1);