@sleep2agi/agent-network-dashboard 0.5.3-preview.233 → 0.5.3-preview.235

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 +1 -1
  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/{0tv.7azxi9c8q.js → 0akslw86.4d-o.js} +1 -1
  143. package/.next/static/chunks/{06kfquwfj2-y6.js → 0q9iic728qbh2.js} +1 -1
  144. package/.next/static/chunks/{02nawp.e3jxot.js → 0xw2-22j63rz_.js} +1 -1
  145. package/.next/static/chunks/{09bnx6qoatdin.js → 14~-7wbixt59z.js} +3 -3
  146. package/.next/static/chunks/{0r.u_oq5pe~z6.css → 17e86fz5zp7-i.css} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +53 -1
  150. package/app/globals.css +33 -2
  151. package/package.json +1 -1
  152. package/scripts/topo-kicker-triple-axis-breath-test.mjs +118 -0
  153. package/scripts/topo-respiratory-tiers-catalog-test.mjs +119 -0
  154. /package/.next/static/{GPHOxGVRvfcbBH1hj4hTD → O43cywiS3WLyRFKTuDOur}/_buildManifest.js +0 -0
  155. /package/.next/static/{GPHOxGVRvfcbBH1hj4hTD → O43cywiS3WLyRFKTuDOur}/_clientMiddlewareManifest.js +0 -0
  156. /package/.next/static/{GPHOxGVRvfcbBH1hj4hTD → O43cywiS3WLyRFKTuDOur}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":342,"timestamp":410020346950,"id":4,"parentId":1,"tags":{},"startTime":1779217992593,"traceId":"7d784225e6fe825f"},{"name":"load-custom-routes","duration":458,"timestamp":410020347456,"id":5,"parentId":1,"tags":{},"startTime":1779217992594,"traceId":"7d784225e6fe825f"},{"name":"create-dist-dir","duration":955,"timestamp":410020347975,"id":6,"parentId":1,"tags":{},"startTime":1779217992594,"traceId":"7d784225e6fe825f"},{"name":"clean","duration":32385,"timestamp":410020349705,"id":7,"parentId":1,"tags":{},"startTime":1779217992596,"traceId":"7d784225e6fe825f"},{"name":"discover-routes","duration":10069,"timestamp":410020462592,"id":8,"parentId":1,"tags":{},"startTime":1779217992709,"traceId":"7d784225e6fe825f"},{"name":"create-root-mapping","duration":107,"timestamp":410020472722,"id":9,"parentId":1,"tags":{},"startTime":1779217992719,"traceId":"7d784225e6fe825f"},{"name":"generate-route-types","duration":33130,"timestamp":410020475346,"id":10,"parentId":1,"tags":{},"startTime":1779217992722,"traceId":"7d784225e6fe825f"},{"name":"public-dir-conflict-check","duration":112,"timestamp":410020508572,"id":11,"parentId":1,"tags":{},"startTime":1779217992755,"traceId":"7d784225e6fe825f"},{"name":"generate-routes-manifest","duration":5320,"timestamp":410020508797,"id":12,"parentId":1,"tags":{},"startTime":1779217992755,"traceId":"7d784225e6fe825f"},{"name":"run-turbopack","duration":6324612,"timestamp":410020519416,"id":14,"parentId":1,"tags":{},"startTime":1779217992766,"traceId":"7d784225e6fe825f"},{"name":"turbopack-build-events","duration":103,"timestamp":410020823164,"id":15,"parentId":1,"tags":{},"startTime":1779217993069,"traceId":"7d784225e6fe825f"},{"name":"run-typescript","duration":10079511,"timestamp":410026855222,"id":16,"parentId":1,"tags":{},"startTime":1779217999102,"traceId":"7d784225e6fe825f"},{"name":"generate-required-server-files","duration":2429,"timestamp":410036936306,"id":18,"parentId":1,"tags":{},"startTime":1779218009183,"traceId":"7d784225e6fe825f"},{"name":"check-static-error-page","duration":16274,"timestamp":410037185358,"id":20,"parentId":19,"tags":{},"startTime":1779218009432,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":484045,"timestamp":410037204907,"id":65,"parentId":22,"tags":{},"startTime":1779218009451,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":500340,"timestamp":410037188799,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779218009435,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":557870,"timestamp":410037205421,"id":69,"parentId":28,"tags":{},"startTime":1779218009452,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":570654,"timestamp":410037192766,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779218009439,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":562261,"timestamp":410037205280,"id":68,"parentId":27,"tags":{},"startTime":1779218009452,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":575006,"timestamp":410037192612,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779218009439,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":566220,"timestamp":410037205982,"id":72,"parentId":32,"tags":{},"startTime":1779218009452,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":578611,"timestamp":410037193651,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779218009440,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":569486,"timestamp":410037206192,"id":73,"parentId":33,"tags":{},"startTime":1779218009452,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":581910,"timestamp":410037193820,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779218009440,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":577160,"timestamp":410037205727,"id":70,"parentId":29,"tags":{},"startTime":1779218009452,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":590020,"timestamp":410037192924,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779218009439,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":583637,"timestamp":410037205164,"id":67,"parentId":26,"tags":{},"startTime":1779218009451,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":596394,"timestamp":410037192464,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779218009439,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":595700,"timestamp":410037204598,"id":64,"parentId":21,"tags":{},"startTime":1779218009451,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":613259,"timestamp":410037187104,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779218009433,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":594419,"timestamp":410037206383,"id":77,"parentId":37,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":606067,"timestamp":410037194930,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779218009441,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":595417,"timestamp":410037206347,"id":76,"parentId":36,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":607094,"timestamp":410037194718,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779218009441,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":599888,"timestamp":410037206310,"id":75,"parentId":35,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":612087,"timestamp":410037194152,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779218009440,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":601489,"timestamp":410037205032,"id":66,"parentId":25,"tags":{},"startTime":1779218009451,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":614289,"timestamp":410037192265,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779218009439,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":604956,"timestamp":410037206278,"id":74,"parentId":34,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":617307,"timestamp":410037193972,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779218009440,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":608179,"timestamp":410037206431,"id":80,"parentId":40,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":619227,"timestamp":410037195426,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779218009442,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":613345,"timestamp":410037206443,"id":81,"parentId":42,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":623995,"timestamp":410037195848,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779218009442,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":620124,"timestamp":410037206478,"id":83,"parentId":45,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":630085,"timestamp":410037196565,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779218009443,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":624350,"timestamp":410037205907,"id":71,"parentId":30,"tags":{},"startTime":1779218009452,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":637186,"timestamp":410037193128,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779218009439,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":630553,"timestamp":410037206524,"id":86,"parentId":48,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":638250,"timestamp":410037198889,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779218009445,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":630805,"timestamp":410037206508,"id":85,"parentId":47,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":638625,"timestamp":410037198738,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779218009445,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":631052,"timestamp":410037206462,"id":82,"parentId":44,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":641144,"timestamp":410037196400,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779218009443,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":631978,"timestamp":410037206551,"id":88,"parentId":50,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":639450,"timestamp":410037199123,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779218009445,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":634654,"timestamp":410037206567,"id":89,"parentId":51,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":642075,"timestamp":410037199188,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779218009445,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":630551,"timestamp":410037212737,"id":91,"parentId":31,"tags":{},"startTime":1779218009459,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":650056,"timestamp":410037193292,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779218009440,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":632749,"timestamp":410037213635,"id":92,"parentId":41,"tags":{},"startTime":1779218009460,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":650876,"timestamp":410037195551,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779218009442,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":632395,"timestamp":410037215359,"id":93,"parentId":43,"tags":{},"startTime":1779218009462,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":651742,"timestamp":410037196054,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779218009442,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":641437,"timestamp":410037206539,"id":87,"parentId":49,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":648991,"timestamp":410037199041,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779218009445,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":641690,"timestamp":410037206496,"id":84,"parentId":46,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":651530,"timestamp":410037196689,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779218009443,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":644250,"timestamp":410037211546,"id":90,"parentId":24,"tags":{},"startTime":1779218009458,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":666370,"timestamp":410037189473,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779218009436,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":659339,"timestamp":410037206415,"id":79,"parentId":39,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":670524,"timestamp":410037195280,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779218009442,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":671877,"timestamp":410037206399,"id":78,"parentId":38,"tags":{},"startTime":1779218009453,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":683191,"timestamp":410037195138,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779218009441,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":679633,"timestamp":410037217841,"id":100,"parentId":58,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":696911,"timestamp":410037200627,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779218009447,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":687518,"timestamp":410037217977,"id":101,"parentId":59,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":704765,"timestamp":410037200790,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779218009447,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":687998,"timestamp":410037217737,"id":94,"parentId":23,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":716641,"timestamp":410037189153,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779218009435,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":689672,"timestamp":410037217799,"id":97,"parentId":54,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":707813,"timestamp":410037199698,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779218009446,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":690159,"timestamp":410037217769,"id":95,"parentId":52,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":708486,"timestamp":410037199487,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779218009446,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":694608,"timestamp":410037218049,"id":104,"parentId":63,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":711238,"timestamp":410037201461,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779218009448,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":694903,"timestamp":410037218020,"id":102,"parentId":61,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":711726,"timestamp":410037201240,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779218009448,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":697031,"timestamp":410037218032,"id":103,"parentId":62,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":713737,"timestamp":410037201357,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779218009448,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":688833,"timestamp":410037227758,"id":105,"parentId":60,"tags":{},"startTime":1779218009474,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":715710,"timestamp":410037200914,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779218009447,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":699324,"timestamp":410037217814,"id":98,"parentId":55,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":717331,"timestamp":410037199836,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779218009446,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":678744,"timestamp":410037240694,"id":106,"parentId":57,"tags":{},"startTime":1779218009487,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":719291,"timestamp":410037200175,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779218009446,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":706888,"timestamp":410037217829,"id":99,"parentId":56,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":724781,"timestamp":410037199978,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779218009446,"traceId":"7d784225e6fe825f"},{"name":"is-page-static","duration":715271,"timestamp":410037217782,"id":96,"parentId":53,"tags":{},"startTime":1779218009464,"traceId":"7d784225e6fe825f"},{"name":"check-page","duration":733503,"timestamp":410037199593,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779218009446,"traceId":"7d784225e6fe825f"},{"name":"static-check","duration":749024,"timestamp":410037184113,"id":19,"parentId":1,"tags":{},"startTime":1779218009430,"traceId":"7d784225e6fe825f"}]
2
- [{"name":"write-routes-manifest","duration":521,"timestamp":410037943668,"id":108,"parentId":1,"tags":{},"startTime":1779218010190,"traceId":"7d784225e6fe825f"},{"name":"load-dotenv","duration":70,"timestamp":410037957232,"id":111,"parentId":110,"tags":{},"startTime":1779218010204,"traceId":"7d784225e6fe825f"},{"name":"run-export-path-map","duration":892,"timestamp":410037960323,"id":112,"parentId":110,"tags":{},"startTime":1779218010207,"traceId":"7d784225e6fe825f"},{"name":"next-export","duration":641473,"timestamp":410037955417,"id":110,"parentId":1,"tags":{},"startTime":1779218010202,"traceId":"7d784225e6fe825f"},{"name":"move-exported-app-not-found-","duration":506,"timestamp":410038600179,"id":113,"parentId":109,"tags":{},"startTime":1779218010846,"traceId":"7d784225e6fe825f"},{"name":"move-exported-app-global-error-","duration":419,"timestamp":410038600774,"id":114,"parentId":109,"tags":{},"startTime":1779218010847,"traceId":"7d784225e6fe825f"},{"name":"static-generation","duration":654604,"timestamp":410037948577,"id":109,"parentId":1,"tags":{},"startTime":1779218010195,"traceId":"7d784225e6fe825f"},{"name":"write-routes-manifest","duration":571,"timestamp":410038603574,"id":115,"parentId":1,"tags":{},"startTime":1779218010850,"traceId":"7d784225e6fe825f"},{"name":"print-tree-view","duration":4225,"timestamp":410038624053,"id":116,"parentId":1,"tags":{},"startTime":1779218010870,"traceId":"7d784225e6fe825f"},{"name":"write-route-bundle-stats","duration":12787,"timestamp":410038628307,"id":117,"parentId":1,"tags":{},"startTime":1779218010875,"traceId":"7d784225e6fe825f"},{"name":"telemetry-flush","duration":21527,"timestamp":410038641125,"id":118,"parentId":1,"tags":{},"startTime":1779218010887,"traceId":"7d784225e6fe825f"},{"name":"next-build","duration":18371415,"timestamp":410020291280,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779217992538,"traceId":"7d784225e6fe825f"}]
1
+ [{"name":"generate-buildid","duration":311,"timestamp":410701790605,"id":4,"parentId":1,"tags":{},"startTime":1779218674037,"traceId":"713a0190ce067588"},{"name":"load-custom-routes","duration":684,"timestamp":410701791100,"id":5,"parentId":1,"tags":{},"startTime":1779218674037,"traceId":"713a0190ce067588"},{"name":"create-dist-dir","duration":944,"timestamp":410701791845,"id":6,"parentId":1,"tags":{},"startTime":1779218674038,"traceId":"713a0190ce067588"},{"name":"clean","duration":41932,"timestamp":410701793676,"id":7,"parentId":1,"tags":{},"startTime":1779218674040,"traceId":"713a0190ce067588"},{"name":"discover-routes","duration":12158,"timestamp":410701925804,"id":8,"parentId":1,"tags":{},"startTime":1779218674172,"traceId":"713a0190ce067588"},{"name":"create-root-mapping","duration":188,"timestamp":410701938052,"id":9,"parentId":1,"tags":{},"startTime":1779218674184,"traceId":"713a0190ce067588"},{"name":"generate-route-types","duration":35563,"timestamp":410701941091,"id":10,"parentId":1,"tags":{},"startTime":1779218674187,"traceId":"713a0190ce067588"},{"name":"public-dir-conflict-check","duration":111,"timestamp":410701976756,"id":11,"parentId":1,"tags":{},"startTime":1779218674223,"traceId":"713a0190ce067588"},{"name":"generate-routes-manifest","duration":5260,"timestamp":410701977031,"id":12,"parentId":1,"tags":{},"startTime":1779218674223,"traceId":"713a0190ce067588"},{"name":"run-turbopack","duration":7275252,"timestamp":410701988878,"id":14,"parentId":1,"tags":{},"startTime":1779218674235,"traceId":"713a0190ce067588"},{"name":"turbopack-build-events","duration":134,"timestamp":410702326847,"id":15,"parentId":1,"tags":{},"startTime":1779218674573,"traceId":"713a0190ce067588"},{"name":"run-typescript","duration":11272454,"timestamp":410709273921,"id":16,"parentId":1,"tags":{},"startTime":1779218681520,"traceId":"713a0190ce067588"},{"name":"generate-required-server-files","duration":3186,"timestamp":410720547689,"id":18,"parentId":1,"tags":{},"startTime":1779218692794,"traceId":"713a0190ce067588"},{"name":"check-static-error-page","duration":16141,"timestamp":410720790800,"id":20,"parentId":19,"tags":{},"startTime":1779218693037,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":603841,"timestamp":410720812083,"id":65,"parentId":22,"tags":{},"startTime":1779218693058,"traceId":"713a0190ce067588"},{"name":"check-page","duration":622229,"timestamp":410720793880,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779218693040,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":655266,"timestamp":410720811690,"id":64,"parentId":21,"tags":{},"startTime":1779218693058,"traceId":"713a0190ce067588"},{"name":"check-page","duration":674652,"timestamp":410720792429,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779218693039,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":687766,"timestamp":410720812268,"id":67,"parentId":26,"tags":{},"startTime":1779218693059,"traceId":"713a0190ce067588"},{"name":"check-page","duration":703097,"timestamp":410720797041,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779218693043,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":691562,"timestamp":410720815532,"id":73,"parentId":33,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":709086,"timestamp":410720798091,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779218693044,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":708264,"timestamp":410720812189,"id":66,"parentId":25,"tags":{},"startTime":1779218693058,"traceId":"713a0190ce067588"},{"name":"check-page","duration":723691,"timestamp":410720796847,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779218693043,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":710398,"timestamp":410720815660,"id":75,"parentId":35,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":727722,"timestamp":410720798410,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779218693045,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":728621,"timestamp":410720815629,"id":74,"parentId":34,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":746121,"timestamp":410720798208,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779218693044,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":731673,"timestamp":410720812989,"id":72,"parentId":32,"tags":{},"startTime":1779218693059,"traceId":"713a0190ce067588"},{"name":"check-page","duration":746753,"timestamp":410720797946,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779218693044,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":737761,"timestamp":410720815706,"id":77,"parentId":37,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":754404,"timestamp":410720799118,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779218693045,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":743387,"timestamp":410720812917,"id":71,"parentId":30,"tags":{},"startTime":1779218693059,"traceId":"713a0190ce067588"},{"name":"check-page","duration":758806,"timestamp":410720797558,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779218693044,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":754742,"timestamp":410720815680,"id":76,"parentId":36,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":771579,"timestamp":410720798915,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779218693045,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":760253,"timestamp":410720815723,"id":78,"parentId":38,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":776799,"timestamp":410720799251,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779218693046,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":762819,"timestamp":410720815747,"id":80,"parentId":40,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":779147,"timestamp":410720799473,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779218693046,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":770531,"timestamp":410720815775,"id":82,"parentId":44,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":786143,"timestamp":410720800234,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779218693047,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":777475,"timestamp":410720815738,"id":79,"parentId":39,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":793913,"timestamp":410720799362,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779218693046,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":781910,"timestamp":410720815799,"id":84,"parentId":46,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":797309,"timestamp":410720800459,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779218693047,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":786081,"timestamp":410720812350,"id":68,"parentId":27,"tags":{},"startTime":1779218693059,"traceId":"713a0190ce067588"},{"name":"check-page","duration":801360,"timestamp":410720797169,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779218693043,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":783101,"timestamp":410720815788,"id":83,"parentId":45,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":798570,"timestamp":410720800364,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779218693047,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":792192,"timestamp":410720815829,"id":86,"parentId":48,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":805870,"timestamp":410720802219,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779218693048,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":792430,"timestamp":410720815814,"id":85,"parentId":47,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":806179,"timestamp":410720802095,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779218693048,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":792545,"timestamp":410720815838,"id":87,"parentId":49,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":806079,"timestamp":410720802330,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779218693049,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":799214,"timestamp":410720815851,"id":88,"parentId":50,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":812680,"timestamp":410720802436,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779218693049,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":791452,"timestamp":410720831090,"id":90,"parentId":24,"tags":{},"startTime":1779218693077,"traceId":"713a0190ce067588"},{"name":"check-page","duration":828204,"timestamp":410720794394,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779218693041,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":787962,"timestamp":410720837503,"id":92,"parentId":41,"tags":{},"startTime":1779218693084,"traceId":"713a0190ce067588"},{"name":"check-page","duration":825973,"timestamp":410720799560,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779218693046,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":816878,"timestamp":410720815761,"id":81,"parentId":42,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":832883,"timestamp":410720799818,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779218693046,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":794761,"timestamp":410720838850,"id":93,"parentId":43,"tags":{},"startTime":1779218693085,"traceId":"713a0190ce067588"},{"name":"check-page","duration":833763,"timestamp":410720799943,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779218693046,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":827776,"timestamp":410720815864,"id":89,"parentId":51,"tags":{},"startTime":1779218693062,"traceId":"713a0190ce067588"},{"name":"check-page","duration":841180,"timestamp":410720802518,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779218693049,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":834148,"timestamp":410720812467,"id":69,"parentId":28,"tags":{},"startTime":1779218693059,"traceId":"713a0190ce067588"},{"name":"check-page","duration":849381,"timestamp":410720797285,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779218693044,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":816451,"timestamp":410720835048,"id":91,"parentId":31,"tags":{},"startTime":1779218693081,"traceId":"713a0190ce067588"},{"name":"check-page","duration":853874,"timestamp":410720797674,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779218693044,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":778889,"timestamp":410720875207,"id":97,"parentId":54,"tags":{},"startTime":1779218693121,"traceId":"713a0190ce067588"},{"name":"check-page","duration":850897,"timestamp":410720803275,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779218693050,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":796563,"timestamp":410720875243,"id":100,"parentId":58,"tags":{},"startTime":1779218693122,"traceId":"713a0190ce067588"},{"name":"check-page","duration":867248,"timestamp":410720804620,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779218693051,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":808884,"timestamp":410720875388,"id":101,"parentId":59,"tags":{},"startTime":1779218693122,"traceId":"713a0190ce067588"},{"name":"check-page","duration":879544,"timestamp":410720804815,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779218693051,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":820701,"timestamp":410720875405,"id":102,"parentId":61,"tags":{},"startTime":1779218693122,"traceId":"713a0190ce067588"},{"name":"check-page","duration":890259,"timestamp":410720805965,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779218693052,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":829271,"timestamp":410720875114,"id":94,"parentId":23,"tags":{},"startTime":1779218693121,"traceId":"713a0190ce067588"},{"name":"check-page","duration":910316,"timestamp":410720794134,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779218693040,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":836968,"timestamp":410720875432,"id":104,"parentId":63,"tags":{},"startTime":1779218693122,"traceId":"713a0190ce067588"},{"name":"check-page","duration":906074,"timestamp":410720806409,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779218693053,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":838706,"timestamp":410720875172,"id":95,"parentId":52,"tags":{},"startTime":1779218693121,"traceId":"713a0190ce067588"},{"name":"check-page","duration":911056,"timestamp":410720802884,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779218693049,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":839373,"timestamp":410720875419,"id":103,"parentId":62,"tags":{},"startTime":1779218693122,"traceId":"713a0190ce067588"},{"name":"check-page","duration":908617,"timestamp":410720806234,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779218693053,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":844237,"timestamp":410720875190,"id":96,"parentId":53,"tags":{},"startTime":1779218693121,"traceId":"713a0190ce067588"},{"name":"check-page","duration":916405,"timestamp":410720803074,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779218693049,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":844794,"timestamp":410720875441,"id":105,"parentId":60,"tags":{},"startTime":1779218693122,"traceId":"713a0190ce067588"},{"name":"check-page","duration":915300,"timestamp":410720804982,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779218693051,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":810149,"timestamp":410720911528,"id":106,"parentId":57,"tags":{},"startTime":1779218693158,"traceId":"713a0190ce067588"},{"name":"check-page","duration":917750,"timestamp":410720803971,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779218693050,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":870228,"timestamp":410720875230,"id":99,"parentId":56,"tags":{},"startTime":1779218693122,"traceId":"713a0190ce067588"},{"name":"check-page","duration":941803,"timestamp":410720803731,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779218693050,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":879640,"timestamp":410720875217,"id":98,"parentId":55,"tags":{},"startTime":1779218693121,"traceId":"713a0190ce067588"},{"name":"check-page","duration":951390,"timestamp":410720803527,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779218693050,"traceId":"713a0190ce067588"},{"name":"is-page-static","duration":944088,"timestamp":410720812751,"id":70,"parentId":29,"tags":{},"startTime":1779218693059,"traceId":"713a0190ce067588"},{"name":"check-page","duration":959490,"timestamp":410720797416,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779218693044,"traceId":"713a0190ce067588"},{"name":"static-check","duration":967251,"timestamp":410720789716,"id":19,"parentId":1,"tags":{},"startTime":1779218693036,"traceId":"713a0190ce067588"}]
2
+ [{"name":"write-routes-manifest","duration":1519,"timestamp":410721775495,"id":108,"parentId":1,"tags":{},"startTime":1779218694022,"traceId":"713a0190ce067588"},{"name":"load-dotenv","duration":58,"timestamp":410721790142,"id":111,"parentId":110,"tags":{},"startTime":1779218694036,"traceId":"713a0190ce067588"},{"name":"run-export-path-map","duration":648,"timestamp":410721793165,"id":112,"parentId":110,"tags":{},"startTime":1779218694039,"traceId":"713a0190ce067588"},{"name":"next-export","duration":750266,"timestamp":410721788834,"id":110,"parentId":1,"tags":{},"startTime":1779218694035,"traceId":"713a0190ce067588"},{"name":"move-exported-app-not-found-","duration":728,"timestamp":410722543820,"id":113,"parentId":109,"tags":{},"startTime":1779218694790,"traceId":"713a0190ce067588"},{"name":"move-exported-app-global-error-","duration":502,"timestamp":410722544706,"id":114,"parentId":109,"tags":{},"startTime":1779218694791,"traceId":"713a0190ce067588"},{"name":"static-generation","duration":765610,"timestamp":410721781944,"id":109,"parentId":1,"tags":{},"startTime":1779218694028,"traceId":"713a0190ce067588"},{"name":"write-routes-manifest","duration":586,"timestamp":410722547899,"id":115,"parentId":1,"tags":{},"startTime":1779218694794,"traceId":"713a0190ce067588"},{"name":"print-tree-view","duration":4811,"timestamp":410722571577,"id":116,"parentId":1,"tags":{},"startTime":1779218694818,"traceId":"713a0190ce067588"},{"name":"write-route-bundle-stats","duration":15549,"timestamp":410722576432,"id":117,"parentId":1,"tags":{},"startTime":1779218694823,"traceId":"713a0190ce067588"},{"name":"telemetry-flush","duration":9360,"timestamp":410722592076,"id":118,"parentId":1,"tags":{},"startTime":1779218694838,"traceId":"713a0190ce067588"},{"name":"next-build","duration":20869209,"timestamp":410701732265,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779218673979,"traceId":"713a0190ce067588"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6324612,"timestamp":410020519416,"id":14,"parentId":1,"tags":{},"startTime":1779217992766,"traceId":"7d784225e6fe825f"},{"name":"turbopack-build-events","duration":103,"timestamp":410020823164,"id":15,"parentId":1,"tags":{},"startTime":1779217993069,"traceId":"7d784225e6fe825f"},{"name":"run-typescript","duration":10079511,"timestamp":410026855222,"id":16,"parentId":1,"tags":{},"startTime":1779217999102,"traceId":"7d784225e6fe825f"},{"name":"static-check","duration":749024,"timestamp":410037184113,"id":19,"parentId":1,"tags":{},"startTime":1779218009430,"traceId":"7d784225e6fe825f"},{"name":"static-generation","duration":654604,"timestamp":410037948577,"id":109,"parentId":1,"tags":{},"startTime":1779218010195,"traceId":"7d784225e6fe825f"},{"name":"telemetry-flush","duration":21527,"timestamp":410038641125,"id":118,"parentId":1,"tags":{},"startTime":1779218010887,"traceId":"7d784225e6fe825f"},{"name":"next-build","duration":18371415,"timestamp":410020291280,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779217992538,"traceId":"7d784225e6fe825f"}]
1
+ [{"name":"run-turbopack","duration":7275252,"timestamp":410701988878,"id":14,"parentId":1,"tags":{},"startTime":1779218674235,"traceId":"713a0190ce067588"},{"name":"turbopack-build-events","duration":134,"timestamp":410702326847,"id":15,"parentId":1,"tags":{},"startTime":1779218674573,"traceId":"713a0190ce067588"},{"name":"run-typescript","duration":11272454,"timestamp":410709273921,"id":16,"parentId":1,"tags":{},"startTime":1779218681520,"traceId":"713a0190ce067588"},{"name":"static-check","duration":967251,"timestamp":410720789716,"id":19,"parentId":1,"tags":{},"startTime":1779218693036,"traceId":"713a0190ce067588"},{"name":"static-generation","duration":765610,"timestamp":410721781944,"id":109,"parentId":1,"tags":{},"startTime":1779218694028,"traceId":"713a0190ce067588"},{"name":"telemetry-flush","duration":9360,"timestamp":410722592076,"id":118,"parentId":1,"tags":{},"startTime":1779218694838,"traceId":"713a0190ce067588"},{"name":"next-build","duration":20869209,"timestamp":410701732265,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779218673979,"traceId":"713a0190ce067588"}]
@@ -4921,8 +4921,17 @@ 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
4937
  { anchor: "watermark", cadence_s: 6, axes: ["opacity", "letter-spacing"] },
@@ -4972,6 +4981,49 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4972
4981
  { name: "canvas-brand-pair", cadences: [6, 7, 13, 15], anchors: ["watermark text", "crescent inner", "crescent wrapper envelope", "watermark wrapper envelope"], shape: "coprime-nested-pair" },
4973
4982
  { name: "background", cadences: [3, 4], anchors: ["row hot", "hub idle"], shape: "baseline-pair" },
4974
4983
  ])}
4984
+ /* Round 720 / Loop — 4TH orthogonal meta-doc catalog: tiers.
4985
+ Joins R710 (cadences) + R716 (axes) + R717 (patterns) to
4986
+ form a 4-axis introspection quadrilateral over the breath
4987
+ family:
4988
+
4989
+ R710 data-topo-respiratory-rolodex — cadence axis
4990
+ R716 data-topo-respiratory-dual-axis-surfaces — axis axis
4991
+ R717 data-topo-respiratory-patterns — pattern axis
4992
+ R720 data-topo-respiratory-tiers — tier axis ← this round
4993
+
4994
+ Patterns (R717) group anchors by STRUCTURAL SHAPE; tiers
4995
+ (R720) group anchors by FUNCTIONAL ROLE. The two slicings
4996
+ are orthogonal:
4997
+ - chrome-strip pattern spans 3 tiers (data + control-wrapper + atomic-control)
4998
+ - title-block pattern is exactly 1 tier
4999
+ - canvas-brand-pair pattern is exactly 1 tier
5000
+ A given anchor belongs to exactly 1 tier (tiers are
5001
+ mutually exclusive), so the catalog is a partition of the
5002
+ 18-anchor family into 7 buckets:
5003
+
5004
+ data (1) zoom-level readout
5005
+ control-wrapper (3) Layout / nodeSize / zoom wrappers
5006
+ atomic-control (2) reset / fullscreen buttons
5007
+ title-block (4) brand logo, kicker, H2, envelope
5008
+ panel-title (2) recent / legend titles
5009
+ canvas-brand (4) watermark text, crescent inner, two envelopes
5010
+ background (2) row hot, hub idle
5011
+
5012
+ Cross-check at runtime: sum of tier anchor counts must
5013
+ equal the flat anchor count in the rolodex (R710); each
5014
+ tier-listed anchor must appear in the rolodex.
5015
+
5016
+ Inline JSON.stringify — invariant string, no DOM thrash.
5017
+ R710/R716/R717 unchanged. */
5018
+ data-topo-respiratory-tiers={JSON.stringify([
5019
+ { name: "data", anchors: ["zoom-level readout"] },
5020
+ { name: "control-wrapper", anchors: ["Layout wrapper", "nodeSize wrapper", "zoom wrapper"] },
5021
+ { name: "atomic-control", anchors: ["reset button", "fullscreen button"] },
5022
+ { name: "title-block", anchors: ["brand logo", "kicker", "H2 section title", "title-block envelope"] },
5023
+ { name: "panel-title", anchors: ["recent title", "legend title"] },
5024
+ { name: "canvas-brand", anchors: ["watermark text", "watermark wrapper envelope", "crescent inner", "crescent wrapper envelope"] },
5025
+ { name: "background", anchors: ["row hot", "hub idle"] },
5026
+ ])}
4975
5027
  data-topo-pinned-aspect={(() => {
4976
5028
  const aspects: string[] = [];
4977
5029
  if (pinnedStatus) aspects.push('status');
package/app/globals.css CHANGED
@@ -1311,9 +1311,40 @@ 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 721 — kicker becomes the family's first TRIPLE-axis breath
1315
+ surface. R699 opacity (6 s) + R714 transform-scale (6 s) joined by
1316
+ R721 text-shadow (6 s) — all 3 axes share the 6 s cadence in phase.
1317
+
1318
+ At rest peak (0%, 100%) the kicker reads as a static title;
1319
+ at mid-breath (50%) it dims (0.78), retracts (scale 0.995), AND
1320
+ emits a soft cyan glow (text-shadow 0 0 6px rgba(34, 211, 238, 0.30)).
1321
+ The glow appears OUT-OF-PHASE with the dim — as the text shrinks
1322
+ slightly it gains a subtle aura. Reads as an "inhale glow": a small
1323
+ visible payoff at the bottom of the breath cycle.
1324
+
1325
+ Why kicker first (vs other dual-axis surfaces):
1326
+ - kicker has the SPARSEST hover signature in the family — being
1327
+ below H2 (the page heading), it's read-target text, not an
1328
+ interactive surface. The breath family's "if hover sig sparse,
1329
+ dual-axis; if hover sig rich, single-axis" budget rule extends
1330
+ naturally to "if hover sig SPARSE, can go triple-axis".
1331
+ - 6 s is the fastest dual-axis cadence in the rolodex — at fast
1332
+ cadence the 3rd axis (a glow appear+disappear cycle every 3 s
1333
+ on each half) registers as ambient rhythm, not a distraction.
1334
+
1335
+ text-shadow chosen over letter-spacing or font-size because:
1336
+ - text-shadow doesn't reflow text (no horizontal motion)
1337
+ - glow against the dark canvas reads clearly without competing
1338
+ with the opacity dim
1339
+ - cyan tint at 30% alpha + 6 px blur is below the brightness
1340
+ threshold of any node halo (R674/R675 nodes use 0.5+ alpha)
1341
+
1342
+ Composition note: the R29 prefers-reduced-motion guard already
1343
+ neutralizes the entire 6 s animation; no separate text-shadow
1344
+ reduced-motion logic needed. */
1314
1345
  @keyframes anet-topo-kicker-breath-kf {
1315
- 0%, 100% { opacity: 1; transform: scale(1); }
1316
- 50% { opacity: 0.78; transform: scale(0.995); }
1346
+ 0%, 100% { opacity: 1; transform: scale(1); text-shadow: none; }
1347
+ 50% { opacity: 0.78; transform: scale(0.995); text-shadow: 0 0 6px rgba(34, 211, 238, 0.30); }
1317
1348
  }
1318
1349
  .anet-topo-kicker-breath {
1319
1350
  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.233",
3
+ "version": "0.5.3-preview.235",
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,119 @@
1
+ /* Round 720 — tiers catalog attr on canvas root. 4TH orthogonal
2
+ * meta-doc axis on the breath family, joining:
3
+ * R710 data-topo-respiratory-rolodex (cadence axis)
4
+ * R716 data-topo-respiratory-dual-axis-surfaces (axis axis)
5
+ * R717 data-topo-respiratory-patterns (pattern axis)
6
+ * R720 data-topo-respiratory-tiers (tier axis) ← this round
7
+ *
8
+ * Tiers partition the 18-anchor family into 7 mutually-exclusive
9
+ * functional-role buckets. Cross-check against R710 rolodex: the
10
+ * union of all tier anchor lists must equal the flat rolodex
11
+ * anchor set (each anchor belongs to exactly 1 tier).
12
+ *
13
+ * Assertions:
14
+ * - attr present on root <svg>
15
+ * - JSON parses to Array of exactly 7 entries
16
+ * - shape: each entry has {name, anchors}
17
+ * - tier names match expected set (alphabetical sort)
18
+ * - total anchor count across tiers = 18
19
+ * - mutual exclusivity: no anchor appears in 2 tiers
20
+ * - rolodex coverage: every rolodex anchor appears in exactly 1 tier
21
+ * - rolodex tightness: every tier-listed anchor appears in rolodex
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-canvas-aria]', { timeout: 15000, state: 'attached' });
55
+ await page.waitForTimeout(300);
56
+
57
+ const runtimeAttrs = await page.evaluate(() => {
58
+ const svg = document.querySelector('[data-topo-canvas-aria]');
59
+ return {
60
+ tiers: svg?.getAttribute('data-topo-respiratory-tiers') ?? null,
61
+ rolodex: svg?.getAttribute('data-topo-respiratory-rolodex') ?? null,
62
+ };
63
+ });
64
+
65
+ await browser.close();
66
+
67
+ let tiers = null;
68
+ let rolodex = null;
69
+ let parseError = null;
70
+ try {
71
+ tiers = JSON.parse(runtimeAttrs.tiers ?? '');
72
+ rolodex = JSON.parse(runtimeAttrs.rolodex ?? '');
73
+ } catch (e) {
74
+ parseError = String(e);
75
+ }
76
+
77
+ const validShape = Array.isArray(tiers)
78
+ ? tiers.every(t => t && typeof t === 'object'
79
+ && typeof t.name === 'string' && t.name.length > 0
80
+ && Array.isArray(t.anchors) && t.anchors.length > 0
81
+ && t.anchors.every(a => typeof a === 'string' && a.length > 0))
82
+ : false;
83
+
84
+ const tierNames = Array.isArray(tiers) ? tiers.map(t => t.name).sort() : [];
85
+ const expectedNames = ['atomic-control', 'background', 'canvas-brand', 'control-wrapper', 'data', 'panel-title', 'title-block'];
86
+
87
+ const flatTierAnchors = Array.isArray(tiers)
88
+ ? tiers.flatMap(t => Array.isArray(t.anchors) ? t.anchors : [])
89
+ : [];
90
+ const tierAnchorSet = new Set(flatTierAnchors);
91
+ const mutualExclusivity = flatTierAnchors.length === tierAnchorSet.size;
92
+
93
+ const rolodexAnchors = rolodex && typeof rolodex === 'object'
94
+ ? Object.values(rolodex).flat()
95
+ : [];
96
+ const rolodexSet = new Set(rolodexAnchors);
97
+
98
+ const rolodexCoverage = [...rolodexSet].every(a => tierAnchorSet.has(a));
99
+ const tierTightness = [...tierAnchorSet].every(a => rolodexSet.has(a));
100
+
101
+ const results = {
102
+ attr_present: !!runtimeAttrs.tiers,
103
+ json_parses: tiers !== null && parseError === null,
104
+ is_array: Array.isArray(tiers),
105
+ has_7_entries: Array.isArray(tiers) && tiers.length === 7,
106
+ shape_valid: validShape,
107
+ tier_names_match: JSON.stringify(tierNames) === JSON.stringify(expectedNames),
108
+ total_anchors_18: flatTierAnchors.length === 18,
109
+ mutual_exclusivity: mutualExclusivity,
110
+ rolodex_coverage: rolodexCoverage,
111
+ tier_tightness: tierTightness,
112
+ };
113
+ const ok = Object.values(results).every(Boolean);
114
+ console.log(`${ok ? '✅' : '❌'} R720 respiratory tiers catalog attr (4th meta-doc axis — breath family quadrilateral):`,
115
+ JSON.stringify(results, null, 2),
116
+ `\n tiers: ${JSON.stringify(tiers)}`,
117
+ parseError ? `\n parseError: ${parseError}` : '',
118
+ `\n rolodex anchors: ${rolodexAnchors.length} · tier anchors: ${flatTierAnchors.length} · unique: ${tierAnchorSet.size}`);
119
+ process.exit(ok ? 0 : 1);