@sleep2agi/agent-network-dashboard 0.5.7-preview.5 → 0.5.7-preview.66

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 (376) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +0 -1
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/diagnostics/route-bundle-stats.json +65 -65
  5. package/.next/fallback-build-manifest.json +3 -3
  6. package/.next/prerender-manifest.json +3 -3
  7. package/.next/routes-manifest.json +0 -6
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found/page/next-font-manifest.json +2 -1
  16. package/.next/server/app/_not-found/page.js +1 -1
  17. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/_not-found.html +4 -4
  20. package/.next/server/app/_not-found.rsc +16 -16
  21. package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
  22. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  23. package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  24. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  25. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -3
  27. package/.next/server/app/admin/page/next-font-manifest.json +2 -1
  28. package/.next/server/app/admin/page.js +1 -1
  29. package/.next/server/app/admin/page.js.nft.json +1 -1
  30. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/admin.html +4 -4
  32. package/.next/server/app/admin.rsc +20 -19
  33. package/.next/server/app/admin.segments/_full.segment.rsc +20 -19
  34. package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
  35. package/.next/server/app/admin.segments/_index.segment.rsc +9 -9
  36. package/.next/server/app/admin.segments/_tree.segment.rsc +5 -4
  37. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +4 -4
  38. package/.next/server/app/admin.segments/admin.segment.rsc +3 -3
  39. package/.next/server/app/index.html +4 -4
  40. package/.next/server/app/index.rsc +20 -19
  41. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  42. package/.next/server/app/index.segments/_full.segment.rsc +20 -19
  43. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  44. package/.next/server/app/index.segments/_index.segment.rsc +9 -9
  45. package/.next/server/app/index.segments/_tree.segment.rsc +5 -4
  46. package/.next/server/app/login/page/next-font-manifest.json +2 -1
  47. package/.next/server/app/login/page.js +1 -1
  48. package/.next/server/app/login/page.js.nft.json +1 -1
  49. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  50. package/.next/server/app/login.html +2 -2
  51. package/.next/server/app/login.rsc +20 -19
  52. package/.next/server/app/login.segments/_full.segment.rsc +20 -19
  53. package/.next/server/app/login.segments/_head.segment.rsc +4 -4
  54. package/.next/server/app/login.segments/_index.segment.rsc +9 -9
  55. package/.next/server/app/login.segments/_tree.segment.rsc +5 -4
  56. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  57. package/.next/server/app/login.segments/login.segment.rsc +3 -3
  58. package/.next/server/app/logs/page/next-font-manifest.json +2 -1
  59. package/.next/server/app/logs/page.js +1 -1
  60. package/.next/server/app/logs/page.js.nft.json +1 -1
  61. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/logs.html +4 -4
  63. package/.next/server/app/logs.rsc +20 -19
  64. package/.next/server/app/logs.segments/_full.segment.rsc +20 -19
  65. package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
  66. package/.next/server/app/logs.segments/_index.segment.rsc +9 -9
  67. package/.next/server/app/logs.segments/_tree.segment.rsc +5 -4
  68. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
  69. package/.next/server/app/logs.segments/logs.segment.rsc +3 -3
  70. package/.next/server/app/manifest.webmanifest.body +1 -1
  71. package/.next/server/app/messages/page/next-font-manifest.json +2 -1
  72. package/.next/server/app/messages/page.js +1 -1
  73. package/.next/server/app/messages/page.js.nft.json +1 -1
  74. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/messages.html +4 -4
  76. package/.next/server/app/messages.rsc +20 -19
  77. package/.next/server/app/messages.segments/_full.segment.rsc +20 -19
  78. package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
  79. package/.next/server/app/messages.segments/_index.segment.rsc +9 -9
  80. package/.next/server/app/messages.segments/_tree.segment.rsc +5 -4
  81. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +4 -4
  82. package/.next/server/app/messages.segments/messages.segment.rsc +3 -3
  83. package/.next/server/app/node/page/next-font-manifest.json +2 -1
  84. package/.next/server/app/node/page.js +1 -1
  85. package/.next/server/app/node/page.js.nft.json +1 -1
  86. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  87. package/.next/server/app/node.html +4 -4
  88. package/.next/server/app/node.rsc +20 -19
  89. package/.next/server/app/node.segments/_full.segment.rsc +20 -19
  90. package/.next/server/app/node.segments/_head.segment.rsc +4 -4
  91. package/.next/server/app/node.segments/_index.segment.rsc +9 -9
  92. package/.next/server/app/node.segments/_tree.segment.rsc +5 -4
  93. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +4 -4
  94. package/.next/server/app/node.segments/node.segment.rsc +3 -3
  95. package/.next/server/app/nodes/page/next-font-manifest.json +2 -1
  96. package/.next/server/app/nodes/page.js +1 -1
  97. package/.next/server/app/nodes/page.js.nft.json +1 -1
  98. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  99. package/.next/server/app/nodes.html +4 -4
  100. package/.next/server/app/nodes.rsc +20 -19
  101. package/.next/server/app/nodes.segments/_full.segment.rsc +20 -19
  102. package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
  103. package/.next/server/app/nodes.segments/_index.segment.rsc +9 -9
  104. package/.next/server/app/nodes.segments/_tree.segment.rsc +5 -4
  105. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +4 -4
  106. package/.next/server/app/nodes.segments/nodes.segment.rsc +3 -3
  107. package/.next/server/app/page/next-font-manifest.json +2 -1
  108. package/.next/server/app/page.js +1 -1
  109. package/.next/server/app/page.js.nft.json +1 -1
  110. package/.next/server/app/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/server-logs/page/next-font-manifest.json +2 -1
  112. package/.next/server/app/server-logs/page.js +1 -1
  113. package/.next/server/app/server-logs/page.js.nft.json +1 -1
  114. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  115. package/.next/server/app/server-logs.html +4 -4
  116. package/.next/server/app/server-logs.rsc +20 -19
  117. package/.next/server/app/server-logs.segments/_full.segment.rsc +20 -19
  118. package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
  119. package/.next/server/app/server-logs.segments/_index.segment.rsc +9 -9
  120. package/.next/server/app/server-logs.segments/_tree.segment.rsc +5 -4
  121. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +4 -4
  122. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +3 -3
  123. package/.next/server/app/servers/page/next-font-manifest.json +2 -1
  124. package/.next/server/app/servers/page.js +1 -1
  125. package/.next/server/app/servers/page.js.nft.json +1 -1
  126. package/.next/server/app/servers/page_client-reference-manifest.js +1 -1
  127. package/.next/server/app/servers.html +4 -4
  128. package/.next/server/app/servers.rsc +20 -19
  129. package/.next/server/app/servers.segments/_full.segment.rsc +20 -19
  130. package/.next/server/app/servers.segments/_head.segment.rsc +4 -4
  131. package/.next/server/app/servers.segments/_index.segment.rsc +9 -9
  132. package/.next/server/app/servers.segments/_tree.segment.rsc +5 -4
  133. package/.next/server/app/servers.segments/servers/__PAGE__.segment.rsc +4 -4
  134. package/.next/server/app/servers.segments/servers.segment.rsc +3 -3
  135. package/.next/server/app/settings/networks/page/next-font-manifest.json +2 -1
  136. package/.next/server/app/settings/networks/page.js +1 -1
  137. package/.next/server/app/settings/networks/page.js.nft.json +1 -1
  138. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  139. package/.next/server/app/settings/networks.html +4 -4
  140. package/.next/server/app/settings/networks.rsc +20 -19
  141. package/.next/server/app/settings/networks.segments/_full.segment.rsc +20 -19
  142. package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
  143. package/.next/server/app/settings/networks.segments/_index.segment.rsc +9 -9
  144. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +5 -4
  145. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +4 -4
  146. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +3 -3
  147. package/.next/server/app/settings/networks.segments/settings.segment.rsc +3 -3
  148. package/.next/server/app/settings/page/next-font-manifest.json +2 -1
  149. package/.next/server/app/settings/page.js +1 -1
  150. package/.next/server/app/settings/page.js.nft.json +1 -1
  151. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  152. package/.next/server/app/settings/tokens/page/next-font-manifest.json +2 -1
  153. package/.next/server/app/settings/tokens/page.js +1 -1
  154. package/.next/server/app/settings/tokens/page.js.nft.json +1 -1
  155. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  156. package/.next/server/app/settings/tokens.html +4 -4
  157. package/.next/server/app/settings/tokens.rsc +20 -19
  158. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +20 -19
  159. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
  160. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +9 -9
  161. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +5 -4
  162. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +4 -4
  163. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +3 -3
  164. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +3 -3
  165. package/.next/server/app/settings.html +4 -4
  166. package/.next/server/app/settings.rsc +20 -19
  167. package/.next/server/app/settings.segments/_full.segment.rsc +20 -19
  168. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  169. package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  170. package/.next/server/app/settings.segments/_tree.segment.rsc +5 -4
  171. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  172. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  173. package/.next/server/app/tasks/[id]/page/next-font-manifest.json +2 -1
  174. package/.next/server/app/tasks/[id]/page.js +1 -1
  175. package/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
  176. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  177. package/.next/server/app/tasks/page/next-font-manifest.json +2 -1
  178. package/.next/server/app/tasks/page.js +1 -1
  179. package/.next/server/app/tasks/page.js.nft.json +1 -1
  180. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  181. package/.next/server/app/tasks.html +4 -4
  182. package/.next/server/app/tasks.rsc +20 -19
  183. package/.next/server/app/tasks.segments/_full.segment.rsc +20 -19
  184. package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
  185. package/.next/server/app/tasks.segments/_index.segment.rsc +9 -9
  186. package/.next/server/app/tasks.segments/_tree.segment.rsc +5 -4
  187. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +4 -4
  188. package/.next/server/app/tasks.segments/tasks.segment.rsc +3 -3
  189. package/.next/server/app-paths-manifest.json +0 -1
  190. package/.next/server/chunks/00jm_next_dist_0ju_ux9._.js +1 -1
  191. package/.next/server/chunks/00jm_next_dist_0ju_ux9._.js.map +1 -1
  192. package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js +1 -1
  193. package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js.map +1 -1
  194. package/.next/server/chunks/ssr/[root-of-the-server]__04gz75y._.js +3 -0
  195. package/.next/server/chunks/ssr/[root-of-the-server]__04gz75y._.js.map +1 -0
  196. package/.next/server/chunks/ssr/[root-of-the-server]__05kf31s._.js +3 -0
  197. package/.next/server/chunks/ssr/[root-of-the-server]__05kf31s._.js.map +1 -0
  198. package/.next/server/chunks/ssr/[root-of-the-server]__096ytyk._.js +3 -0
  199. package/.next/server/chunks/ssr/[root-of-the-server]__096ytyk._.js.map +1 -0
  200. package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js +1 -1
  201. package/.next/server/chunks/ssr/[root-of-the-server]__0fhoq8i._.js.map +1 -1
  202. package/.next/server/chunks/ssr/[root-of-the-server]__0u4-66w._.js +8 -0
  203. package/.next/server/chunks/ssr/[root-of-the-server]__0u4-66w._.js.map +1 -0
  204. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  205. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  206. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  207. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  208. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  209. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  210. package/.next/server/chunks/ssr/agent-network-dashboard_app_0_870i8._.js +3 -0
  211. package/.next/server/chunks/ssr/agent-network-dashboard_app_0_870i8._.js.map +1 -0
  212. package/.next/server/chunks/ssr/agent-network-dashboard_app_0_d45-d._.js +1 -1
  213. package/.next/server/chunks/ssr/agent-network-dashboard_app_0_d45-d._.js.map +1 -1
  214. package/.next/server/chunks/ssr/agent-network-dashboard_app_0fjlnh~._.js +3 -0
  215. package/.next/server/chunks/ssr/agent-network-dashboard_app_0fjlnh~._.js.map +1 -0
  216. package/.next/server/chunks/ssr/agent-network-dashboard_app_0gd.4pc._.js +9 -0
  217. package/.next/server/chunks/ssr/agent-network-dashboard_app_0gd.4pc._.js.map +1 -0
  218. package/.next/server/chunks/ssr/agent-network-dashboard_app_0wn4jc5._.js +3 -0
  219. package/.next/server/chunks/ssr/agent-network-dashboard_app_0wn4jc5._.js.map +1 -0
  220. package/.next/server/chunks/ssr/agent-network-dashboard_app_0xgney8._.js +1 -1
  221. package/.next/server/chunks/ssr/agent-network-dashboard_app_0xgney8._.js.map +1 -1
  222. package/.next/server/chunks/ssr/agent-network-dashboard_app_10hjgv4._.js +1 -1
  223. package/.next/server/chunks/ssr/agent-network-dashboard_app_10hjgv4._.js.map +1 -1
  224. package/.next/server/chunks/ssr/agent-network-dashboard_app_12l4oto._.js +1 -1
  225. package/.next/server/chunks/ssr/agent-network-dashboard_app_12l4oto._.js.map +1 -1
  226. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0r7kb.o._.js +9 -0
  227. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0r7kb.o._.js.map +1 -0
  228. package/.next/server/chunks/ssr/agent-network-dashboard_app_servers_page_tsx_0jib5qm._.js +1 -1
  229. package/.next/server/chunks/ssr/agent-network-dashboard_app_servers_page_tsx_0jib5qm._.js.map +1 -1
  230. package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js +1 -1
  231. package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js.map +1 -1
  232. package/.next/server/middleware-build-manifest.js +3 -3
  233. package/.next/server/next-font-manifest.js +1 -1
  234. package/.next/server/next-font-manifest.json +30 -15
  235. package/.next/server/pages/404.html +4 -4
  236. package/.next/server/pages/500.html +1 -1
  237. package/.next/server/server-reference-manifest.js +1 -1
  238. package/.next/server/server-reference-manifest.json +1 -1
  239. package/.next/static/chunks/{0jp~cs9-zkmqa.js → 00b4y77vxfabl.js} +1 -1
  240. package/.next/static/chunks/00y0qgigxb62-.js +1 -0
  241. package/.next/static/chunks/049vx3qljs1tt.js +1 -0
  242. package/.next/static/chunks/04cf.98_cyxen.js +1 -0
  243. package/.next/static/chunks/066jf0nk75nic.css +2 -0
  244. package/.next/static/chunks/07sj5zwg46-5~.css +1 -0
  245. package/.next/static/chunks/0_bn~gcrgo.4n.js +1 -0
  246. package/.next/static/chunks/0g4d-_fi-d9hg.js +1 -0
  247. package/.next/static/chunks/0t4lpxu4ny9-3.js +1 -0
  248. package/.next/static/chunks/0vgrwqsgja19l.js +1 -0
  249. package/.next/static/chunks/0wz0122ym_gr3.js +1 -0
  250. package/.next/static/chunks/0xxx7yeapw~2a.js +1 -0
  251. package/.next/static/chunks/0y5gol09tlu63.js +1 -0
  252. package/.next/static/chunks/143g3n8za083f.js +7 -0
  253. package/.next/static/chunks/149a4l50_3vw-.js +7 -0
  254. package/.next/static/chunks/14lac~_cpjlh..js +1 -0
  255. package/.next/static/chunks/152_p6jt7txp6.js +1 -0
  256. package/.next/static/chunks/165v74i3j-wk0.js +1 -0
  257. package/.next/static/chunks/16glr1c4nc85n.js +4 -0
  258. package/.next/static/chunks/17-7ama~oijou.js +1 -0
  259. package/.next/static/media/4fa387ec64143e14-s.0wkzw~je483f-.woff2 +0 -0
  260. package/.next/static/media/53b9e256198e5412-s.0-wfv7uh4i7h9.woff2 +0 -0
  261. package/.next/static/media/5ce348bf30bf5439-s.0zgw-jeven.3w.woff2 +0 -0
  262. package/.next/static/media/6306c77e7c8268e4-s.0rhz0arwfsn~5.woff2 +0 -0
  263. package/.next/static/media/7178b3e590c64307-s.0nx0ww8fni_q3.woff2 +0 -0
  264. package/.next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2 +0 -0
  265. package/.next/static/media/7d817b4c03b0c5f1-s.0l76wvqk9d84w.woff2 +0 -0
  266. package/.next/static/media/8a480f0b521d4e75-s.0jzbimsg8vl84.woff2 +0 -0
  267. package/.next/static/media/bbc41e54d2fcbd21-s.0k4k9394f2q-k.woff2 +0 -0
  268. package/.next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2 +0 -0
  269. package/.next/static/media/fef07dbb0973bf53-s.12tyk43_3sh9u.woff2 +0 -0
  270. package/.next/trace +2 -2
  271. package/.next/trace-build +1 -1
  272. package/.next/types/routes.d.ts +1 -2
  273. package/.next/types/validator.ts +0 -9
  274. package/app/admin/page.tsx +53 -38
  275. package/app/components/AgentCard.tsx +38 -17
  276. package/app/components/AppShell.tsx +7 -1
  277. package/app/components/ChatPopover.tsx +1 -1
  278. package/app/components/CollapsibleSearch.tsx +127 -0
  279. package/app/components/CommandCenter.tsx +14 -4
  280. package/app/components/CommandPalette.tsx +6 -6
  281. package/app/components/DispatchPanel.tsx +13 -10
  282. package/app/components/EmptyState.tsx +11 -4
  283. package/app/components/HealthBanner.tsx +28 -4
  284. package/app/components/HelpOverlay.tsx +4 -7
  285. package/app/components/LoadingSkeleton.tsx +31 -21
  286. package/app/components/MobileNav.tsx +28 -21
  287. package/app/components/Sidebar.tsx +30 -23
  288. package/app/components/StatsBar.tsx +40 -42
  289. package/app/components/TaskChatPanel.tsx +19 -5
  290. package/app/components/TaskDrawer.tsx +9 -7
  291. package/app/components/ThemeSwitcher.tsx +15 -79
  292. package/app/components/TopoGraph.tsx +31 -21
  293. package/app/components/UserBar.tsx +5 -5
  294. package/app/globals.css +1757 -1776
  295. package/app/layout.tsx +37 -4
  296. package/app/lib/hooks.ts +0 -5
  297. package/app/lib/status.ts +24 -17
  298. package/app/login/page.tsx +7 -7
  299. package/app/logs/page.tsx +12 -6
  300. package/app/manifest.ts +2 -2
  301. package/app/messages/page.tsx +84 -57
  302. package/app/node/page.tsx +27 -17
  303. package/app/nodes/page.tsx +62 -49
  304. package/app/page.tsx +40 -269
  305. package/app/server-logs/page.tsx +40 -14
  306. package/app/servers/page.tsx +33 -12
  307. package/app/settings/networks/page.tsx +17 -15
  308. package/app/settings/page.tsx +90 -95
  309. package/app/settings/tokens/page.tsx +5 -5
  310. package/app/tasks/[id]/page.tsx +10 -10
  311. package/app/tasks/page.tsx +58 -34
  312. package/bin/start.js +0 -0
  313. package/package.json +1 -1
  314. package/public/favicon.svg +1 -1
  315. package/public/manifest.webmanifest +24 -0
  316. package/public/robots.txt +7 -0
  317. package/.next/server/app/api/hub/license/route/app-paths-manifest.json +0 -3
  318. package/.next/server/app/api/hub/license/route/build-manifest.json +0 -9
  319. package/.next/server/app/api/hub/license/route/server-reference-manifest.json +0 -4
  320. package/.next/server/app/api/hub/license/route.js +0 -7
  321. package/.next/server/app/api/hub/license/route.js.map +0 -5
  322. package/.next/server/app/api/hub/license/route.js.nft.json +0 -1
  323. package/.next/server/app/api/hub/license/route_client-reference-manifest.js +0 -3
  324. package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js +0 -3
  325. package/.next/server/chunks/0ykm__next-internal_server_app_api_hub_license_route_actions_0a4.fuh.js.map +0 -1
  326. package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js +0 -3
  327. package/.next/server/chunks/[root-of-the-server]__0rovr5-._.js.map +0 -1
  328. package/.next/server/chunks/ssr/[root-of-the-server]__0lu1wok._.js +0 -8
  329. package/.next/server/chunks/ssr/[root-of-the-server]__0lu1wok._.js.map +0 -1
  330. package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js +0 -3
  331. package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js.map +0 -1
  332. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +0 -3
  333. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +0 -1
  334. package/.next/server/chunks/ssr/[root-of-the-server]__11fu-5m._.js +0 -3
  335. package/.next/server/chunks/ssr/[root-of-the-server]__11fu-5m._.js.map +0 -1
  336. package/.next/server/chunks/ssr/agent-network-dashboard_app_057q.ne._.js +0 -3
  337. package/.next/server/chunks/ssr/agent-network-dashboard_app_057q.ne._.js.map +0 -1
  338. package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js +0 -3
  339. package/.next/server/chunks/ssr/agent-network-dashboard_app_0i3759l._.js.map +0 -1
  340. package/.next/server/chunks/ssr/agent-network-dashboard_app_1153xeb._.js +0 -9
  341. package/.next/server/chunks/ssr/agent-network-dashboard_app_1153xeb._.js.map +0 -1
  342. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0s5uqlp._.js +0 -9
  343. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0s5uqlp._.js.map +0 -1
  344. package/.next/server/chunks/ssr/agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js +0 -3
  345. package/.next/server/chunks/ssr/agent-network-dashboard_app_server-logs_page_tsx_0dg.l_8._.js.map +0 -1
  346. package/.next/static/chunks/0-mpa_947ipeq.js +0 -1
  347. package/.next/static/chunks/0.t1evm65itbw.js +0 -1
  348. package/.next/static/chunks/03~5pxwbxxw-b.js +0 -1
  349. package/.next/static/chunks/04~fkia6-79k3.js +0 -1
  350. package/.next/static/chunks/0561vp5-q5.zp.js +0 -1
  351. package/.next/static/chunks/05uk96gc~9mni.js +0 -1
  352. package/.next/static/chunks/0a.9~-nf0gpec.js +0 -1
  353. package/.next/static/chunks/0az0wa3gxme68.js +0 -1
  354. package/.next/static/chunks/0dq6wv-e0vk_o.css +0 -1
  355. package/.next/static/chunks/0gi_03g-uxj0r.js +0 -1
  356. package/.next/static/chunks/0im751o4n61c7.js +0 -1
  357. package/.next/static/chunks/0inql3s9ldyx5.js +0 -1
  358. package/.next/static/chunks/0ku0fjqlm9mca.js +0 -1
  359. package/.next/static/chunks/0nqm.7w9_inwd.js +0 -7
  360. package/.next/static/chunks/13yktdzuatx3d.js +0 -1
  361. package/.next/static/chunks/15-ltfhot3b4n.js +0 -7
  362. package/.next/static/chunks/15qxef.ilfysw.js +0 -4
  363. package/.next/static/chunks/17sxlwlx5fhrp.css +0 -1
  364. package/.next/static/chunks/181u38qblp8lz.js +0 -1
  365. package/.next/static/media/4fa387ec64143e14-s.0.qu-9752pffj.woff2 +0 -0
  366. package/.next/static/media/5ce348bf30bf5439-s.0ee55_hj9qcer.woff2 +0 -0
  367. package/.next/static/media/6306c77e7c8268e4-s.0mao5jbfbduzp.woff2 +0 -0
  368. package/.next/static/media/797e433ab948586e-s.p.09zddjkbdep5a.woff2 +0 -0
  369. package/.next/static/media/7d817b4c03b0c5f1-s.0uzt.a6d44yda.woff2 +0 -0
  370. package/.next/static/media/bbc41e54d2fcbd21-s.0mvwgmnhv29no.woff2 +0 -0
  371. package/app/api/hub/license/route.ts +0 -33
  372. package/app/components/BroadcastBar.tsx +0 -84
  373. package/app/components/InboxPanel.tsx +0 -36
  374. /package/.next/static/{e-lUTefNl8edrYCV4yWtG → 2dHfsg3G4Q4tXXzlz3hFv}/_buildManifest.js +0 -0
  375. /package/.next/static/{e-lUTefNl8edrYCV4yWtG → 2dHfsg3G4Q4tXXzlz3hFv}/_clientMiddlewareManifest.js +0 -0
  376. /package/.next/static/{e-lUTefNl8edrYCV4yWtG → 2dHfsg3G4Q4tXXzlz3hFv}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":398,"timestamp":1992004878543,"id":4,"parentId":1,"tags":{},"startTime":1780799977125,"traceId":"2f4a1f4ab942d75c"},{"name":"load-custom-routes","duration":695,"timestamp":1992004879202,"id":5,"parentId":1,"tags":{},"startTime":1780799977125,"traceId":"2f4a1f4ab942d75c"},{"name":"create-dist-dir","duration":1191,"timestamp":1992004879961,"id":6,"parentId":1,"tags":{},"startTime":1780799977126,"traceId":"2f4a1f4ab942d75c"},{"name":"clean","duration":67079,"timestamp":1992004882070,"id":7,"parentId":1,"tags":{},"startTime":1780799977128,"traceId":"2f4a1f4ab942d75c"},{"name":"discover-routes","duration":38737,"timestamp":1992005141015,"id":8,"parentId":1,"tags":{},"startTime":1780799977387,"traceId":"2f4a1f4ab942d75c"},{"name":"create-root-mapping","duration":195,"timestamp":1992005179838,"id":9,"parentId":1,"tags":{},"startTime":1780799977426,"traceId":"2f4a1f4ab942d75c"},{"name":"generate-route-types","duration":84381,"timestamp":1992005183916,"id":10,"parentId":1,"tags":{},"startTime":1780799977430,"traceId":"2f4a1f4ab942d75c"},{"name":"public-dir-conflict-check","duration":132,"timestamp":1992005268423,"id":11,"parentId":1,"tags":{},"startTime":1780799977515,"traceId":"2f4a1f4ab942d75c"},{"name":"generate-routes-manifest","duration":19622,"timestamp":1992005268735,"id":12,"parentId":1,"tags":{},"startTime":1780799977515,"traceId":"2f4a1f4ab942d75c"},{"name":"run-turbopack","duration":61878259,"timestamp":1992005308993,"id":14,"parentId":1,"tags":{},"startTime":1780799977555,"traceId":"2f4a1f4ab942d75c"},{"name":"turbopack-build-events","duration":126,"timestamp":1992006157401,"id":15,"parentId":1,"tags":{},"startTime":1780799978404,"traceId":"2f4a1f4ab942d75c"},{"name":"run-typescript","duration":44080276,"timestamp":1992067230064,"id":16,"parentId":1,"tags":{},"startTime":1780800039476,"traceId":"2f4a1f4ab942d75c"},{"name":"generate-required-server-files","duration":17824,"timestamp":1992111314732,"id":18,"parentId":1,"tags":{},"startTime":1780800083561,"traceId":"2f4a1f4ab942d75c"},{"name":"check-static-error-page","duration":33999,"timestamp":1992112369580,"id":20,"parentId":19,"tags":{},"startTime":1780800084616,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2725363,"timestamp":1992112431491,"id":73,"parentId":29,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":2776061,"timestamp":1992112380979,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1780800084627,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2768419,"timestamp":1992112431695,"id":74,"parentId":30,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":2819045,"timestamp":1992112381165,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1780800084627,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2858731,"timestamp":1992112431764,"id":75,"parentId":32,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":2908186,"timestamp":1992112382389,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1780800084629,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2920839,"timestamp":1992112429553,"id":68,"parentId":22,"tags":{},"startTime":1780800084676,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":2973987,"timestamp":1992112376495,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1780800084623,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2918687,"timestamp":1992112431983,"id":76,"parentId":33,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":2968191,"timestamp":1992112382518,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1780800084629,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2969243,"timestamp":1992112432116,"id":78,"parentId":35,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3018712,"timestamp":1992112382724,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1780800084629,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2991976,"timestamp":1992112432131,"id":79,"parentId":36,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3040996,"timestamp":1992112383210,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1780800084629,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":2993120,"timestamp":1992112431332,"id":72,"parentId":28,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3043628,"timestamp":1992112380864,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1780800084627,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3003404,"timestamp":1992112432170,"id":80,"parentId":37,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3052257,"timestamp":1992112383378,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1780800084630,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3012905,"timestamp":1992112432201,"id":82,"parentId":39,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3061580,"timestamp":1992112383588,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1780800084630,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3076288,"timestamp":1992112432211,"id":83,"parentId":40,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3123751,"timestamp":1992112384826,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1780800084631,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3100923,"timestamp":1992112432187,"id":81,"parentId":38,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3149703,"timestamp":1992112383500,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1780800084630,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3179310,"timestamp":1992112432225,"id":84,"parentId":42,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3225873,"timestamp":1992112385755,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1780800084632,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3209160,"timestamp":1992112432247,"id":86,"parentId":45,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3255080,"timestamp":1992112386400,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1780800084633,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3238111,"timestamp":1992112432238,"id":85,"parentId":44,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3284161,"timestamp":1992112386261,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1780800084633,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3248041,"timestamp":1992112432259,"id":87,"parentId":46,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3293864,"timestamp":1992112386506,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1780800084633,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3255003,"timestamp":1992112432273,"id":88,"parentId":47,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3300745,"timestamp":1992112386613,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1780800084633,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3275528,"timestamp":1992112432287,"id":89,"parentId":48,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3321407,"timestamp":1992112386707,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1780800084633,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3280850,"timestamp":1992112432297,"id":90,"parentId":49,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3326545,"timestamp":1992112386820,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1780800084633,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3299928,"timestamp":1992112432327,"id":92,"parentId":51,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3343153,"timestamp":1992112389157,"id":51,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1780800084635,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3321974,"timestamp":1992112432312,"id":91,"parentId":50,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3365389,"timestamp":1992112388958,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1780800084635,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3353708,"timestamp":1992112432348,"id":94,"parentId":55,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3395905,"timestamp":1992112390216,"id":55,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1780800084636,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3344683,"timestamp":1992112464513,"id":95,"parentId":24,"tags":{},"startTime":1780800084711,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3432164,"timestamp":1992112377104,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1780800084623,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3381470,"timestamp":1992112465744,"id":96,"parentId":31,"tags":{},"startTime":1780800084712,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3465222,"timestamp":1992112382067,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1780800084628,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3415134,"timestamp":1992112432336,"id":93,"parentId":52,"tags":{},"startTime":1780800084679,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3458202,"timestamp":1992112389310,"id":52,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1780800084636,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3432223,"timestamp":1992112429751,"id":69,"parentId":25,"tags":{},"startTime":1780800084676,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3481606,"timestamp":1992112380439,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1780800084627,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3388467,"timestamp":1992112473734,"id":97,"parentId":41,"tags":{},"startTime":1780800084720,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3477290,"timestamp":1992112384949,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1780800084631,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3432090,"timestamp":1992112474791,"id":98,"parentId":43,"tags":{},"startTime":1780800084721,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3521063,"timestamp":1992112385915,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1780800084632,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3605437,"timestamp":1992112429987,"id":71,"parentId":27,"tags":{},"startTime":1780800084676,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3654774,"timestamp":1992112380736,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1780800084627,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3631245,"timestamp":1992112552751,"id":100,"parentId":53,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3794332,"timestamp":1992112389765,"id":53,"parentId":19,"tags":{"page":"/login"},"startTime":1780800084636,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3696329,"timestamp":1992112552793,"id":103,"parentId":57,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3852488,"timestamp":1992112396734,"id":57,"parentId":19,"tags":{"page":"/node"},"startTime":1780800084643,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3831703,"timestamp":1992112429876,"id":70,"parentId":26,"tags":{},"startTime":1780800084676,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3881044,"timestamp":1992112380617,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1780800084627,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3714139,"timestamp":1992112552695,"id":99,"parentId":23,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3890110,"timestamp":1992112376806,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1780800084623,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3714439,"timestamp":1992112552929,"id":104,"parentId":58,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3870444,"timestamp":1992112396981,"id":58,"parentId":19,"tags":{"page":"/nodes"},"startTime":1780800084643,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3887961,"timestamp":1992112432086,"id":77,"parentId":34,"tags":{},"startTime":1780800084678,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3937524,"timestamp":1992112382626,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1780800084629,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3782577,"timestamp":1992112552768,"id":101,"parentId":54,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3945453,"timestamp":1992112389963,"id":54,"parentId":19,"tags":{"page":"/logs"},"startTime":1780800084636,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3788510,"timestamp":1992112552975,"id":107,"parentId":62,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3941212,"timestamp":1992112400326,"id":62,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1780800084647,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3796216,"timestamp":1992112553029,"id":110,"parentId":66,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3946014,"timestamp":1992112403280,"id":66,"parentId":19,"tags":{"page":"/tasks"},"startTime":1780800084650,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3807030,"timestamp":1992112553044,"id":111,"parentId":63,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3957729,"timestamp":1992112402408,"id":63,"parentId":19,"tags":{"page":"/settings"},"startTime":1780800084649,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3822345,"timestamp":1992112552961,"id":106,"parentId":61,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3975190,"timestamp":1992112400165,"id":61,"parentId":19,"tags":{"page":"/servers"},"startTime":1780800084646,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3730682,"timestamp":1992112645951,"id":112,"parentId":59,"tags":{},"startTime":1780800084892,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3979201,"timestamp":1992112397477,"id":59,"parentId":19,"tags":{"page":"/"},"startTime":1780800084644,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3825338,"timestamp":1992112552998,"id":109,"parentId":65,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":3975282,"timestamp":1992112403105,"id":65,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1780800084649,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":3932076,"timestamp":1992112552779,"id":102,"parentId":56,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":4088466,"timestamp":1992112396471,"id":56,"parentId":19,"tags":{"page":"/messages"},"startTime":1780800084643,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":4027659,"timestamp":1992112552951,"id":105,"parentId":60,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"}]
2
- [{"name":"check-page","duration":4182831,"timestamp":1992112398109,"id":60,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1780800084644,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":4355037,"timestamp":1992112420416,"id":67,"parentId":21,"tags":{},"startTime":1780800084667,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":4401084,"timestamp":1992112374467,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1780800084621,"traceId":"2f4a1f4ab942d75c"},{"name":"is-page-static","duration":4222676,"timestamp":1992112552989,"id":108,"parentId":64,"tags":{},"startTime":1780800084799,"traceId":"2f4a1f4ab942d75c"},{"name":"check-page","duration":4372770,"timestamp":1992112402932,"id":64,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1780800084649,"traceId":"2f4a1f4ab942d75c"},{"name":"static-check","duration":4409689,"timestamp":1992112366066,"id":19,"parentId":1,"tags":{},"startTime":1780800084615,"traceId":"2f4a1f4ab942d75c"},{"name":"write-routes-manifest","duration":2738,"timestamp":1992116806273,"id":114,"parentId":1,"tags":{},"startTime":1780800089053,"traceId":"2f4a1f4ab942d75c"},{"name":"load-dotenv","duration":72,"timestamp":1992116865869,"id":117,"parentId":116,"tags":{},"startTime":1780800089112,"traceId":"2f4a1f4ab942d75c"},{"name":"run-export-path-map","duration":923,"timestamp":1992116876738,"id":118,"parentId":116,"tags":{},"startTime":1780800089123,"traceId":"2f4a1f4ab942d75c"},{"name":"next-export","duration":2645461,"timestamp":1992116860809,"id":116,"parentId":1,"tags":{},"startTime":1780800089107,"traceId":"2f4a1f4ab942d75c"},{"name":"move-exported-app-not-found-","duration":10895,"timestamp":1992119520425,"id":119,"parentId":115,"tags":{},"startTime":1780800091767,"traceId":"2f4a1f4ab942d75c"},{"name":"move-exported-app-global-error-","duration":2149,"timestamp":1992119531522,"id":120,"parentId":115,"tags":{},"startTime":1780800091778,"traceId":"2f4a1f4ab942d75c"},{"name":"static-generation","duration":2695422,"timestamp":1992116844310,"id":115,"parentId":1,"tags":{},"startTime":1780800089091,"traceId":"2f4a1f4ab942d75c"},{"name":"write-routes-manifest","duration":529,"timestamp":1992119541218,"id":121,"parentId":1,"tags":{},"startTime":1780800091787,"traceId":"2f4a1f4ab942d75c"},{"name":"print-tree-view","duration":17836,"timestamp":1992119577756,"id":122,"parentId":1,"tags":{},"startTime":1780800091824,"traceId":"2f4a1f4ab942d75c"},{"name":"write-route-bundle-stats","duration":84542,"timestamp":1992119595633,"id":123,"parentId":1,"tags":{},"startTime":1780800091842,"traceId":"2f4a1f4ab942d75c"},{"name":"telemetry-flush","duration":117,"timestamp":1992119680222,"id":124,"parentId":1,"tags":{},"startTime":1780800091927,"traceId":"2f4a1f4ab942d75c"},{"name":"next-build","duration":114962897,"timestamp":1992004717467,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1780799976964,"traceId":"2f4a1f4ab942d75c"}]
1
+ [{"name":"generate-buildid","duration":252,"timestamp":2260978347447,"id":4,"parentId":1,"tags":{},"startTime":1781068950594,"traceId":"f897edea9b4c8b59"},{"name":"load-custom-routes","duration":592,"timestamp":2260978347850,"id":5,"parentId":1,"tags":{},"startTime":1781068950594,"traceId":"f897edea9b4c8b59"},{"name":"create-dist-dir","duration":923,"timestamp":2260978348508,"id":6,"parentId":1,"tags":{},"startTime":1781068950595,"traceId":"f897edea9b4c8b59"},{"name":"clean","duration":35992,"timestamp":2260978350153,"id":7,"parentId":1,"tags":{},"startTime":1781068950596,"traceId":"f897edea9b4c8b59"},{"name":"discover-routes","duration":29691,"timestamp":2260978487959,"id":8,"parentId":1,"tags":{},"startTime":1781068950734,"traceId":"f897edea9b4c8b59"},{"name":"create-root-mapping","duration":153,"timestamp":2260978517720,"id":9,"parentId":1,"tags":{},"startTime":1781068950764,"traceId":"f897edea9b4c8b59"},{"name":"generate-route-types","duration":27805,"timestamp":2260978520522,"id":10,"parentId":1,"tags":{},"startTime":1781068950767,"traceId":"f897edea9b4c8b59"},{"name":"public-dir-conflict-check","duration":132,"timestamp":2260978548470,"id":11,"parentId":1,"tags":{},"startTime":1781068950795,"traceId":"f897edea9b4c8b59"},{"name":"generate-routes-manifest","duration":6193,"timestamp":2260978548781,"id":12,"parentId":1,"tags":{},"startTime":1781068950795,"traceId":"f897edea9b4c8b59"},{"name":"run-turbopack","duration":13122951,"timestamp":2260978571971,"id":14,"parentId":1,"tags":{},"startTime":1781068950818,"traceId":"f897edea9b4c8b59"},{"name":"turbopack-build-events","duration":120,"timestamp":2260978929909,"id":15,"parentId":1,"tags":{},"startTime":1781068951176,"traceId":"f897edea9b4c8b59"},{"name":"run-typescript","duration":10882737,"timestamp":2260991705226,"id":16,"parentId":1,"tags":{},"startTime":1781068963952,"traceId":"f897edea9b4c8b59"},{"name":"generate-required-server-files","duration":3058,"timestamp":2261002589490,"id":18,"parentId":1,"tags":{},"startTime":1781068974836,"traceId":"f897edea9b4c8b59"},{"name":"check-static-error-page","duration":14533,"timestamp":2261002819082,"id":20,"parentId":19,"tags":{},"startTime":1781068975065,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":507306,"timestamp":2261002837640,"id":67,"parentId":22,"tags":{},"startTime":1781068975084,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":522575,"timestamp":2261002822582,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1781068975069,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":559023,"timestamp":2261002838831,"id":70,"parentId":27,"tags":{},"startTime":1781068975085,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":572233,"timestamp":2261002825717,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1781068975072,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":589198,"timestamp":2261002839421,"id":74,"parentId":32,"tags":{},"startTime":1781068975086,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":602036,"timestamp":2261002826663,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1781068975073,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":593536,"timestamp":2261002841678,"id":75,"parentId":33,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":608460,"timestamp":2261002826837,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1781068975073,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":609797,"timestamp":2261002841803,"id":76,"parentId":34,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":624713,"timestamp":2261002826972,"id":34,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1781068975073,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":618272,"timestamp":2261002841835,"id":77,"parentId":35,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":633077,"timestamp":2261002827127,"id":35,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1781068975073,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":621383,"timestamp":2261002839093,"id":71,"parentId":28,"tags":{},"startTime":1781068975085,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":634662,"timestamp":2261002825879,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1781068975072,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":620605,"timestamp":2261002841859,"id":78,"parentId":36,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":634878,"timestamp":2261002827641,"id":36,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1781068975074,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":625027,"timestamp":2261002841907,"id":80,"parentId":38,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":638989,"timestamp":2261002828028,"id":38,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1781068975074,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":625741,"timestamp":2261002841891,"id":79,"parentId":37,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":639811,"timestamp":2261002827873,"id":37,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1781068975074,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":629415,"timestamp":2261002841921,"id":81,"parentId":39,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":643220,"timestamp":2261002828164,"id":39,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1781068975074,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":637724,"timestamp":2261002841949,"id":83,"parentId":43,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":650677,"timestamp":2261002829050,"id":43,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1781068975075,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":643255,"timestamp":2261002841959,"id":84,"parentId":44,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":654583,"timestamp":2261002830686,"id":44,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1781068975077,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":649318,"timestamp":2261002841973,"id":85,"parentId":45,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":660531,"timestamp":2261002830811,"id":45,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1781068975077,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":657765,"timestamp":2261002837749,"id":68,"parentId":25,"tags":{},"startTime":1781068975084,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":670151,"timestamp":2261002825410,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1781068975072,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":660113,"timestamp":2261002841985,"id":86,"parentId":46,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":671224,"timestamp":2261002830940,"id":46,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1781068975077,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":660536,"timestamp":2261002841935,"id":82,"parentId":41,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":673987,"timestamp":2261002828553,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1781068975075,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":660694,"timestamp":2261002841995,"id":87,"parentId":47,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":671686,"timestamp":2261002831051,"id":47,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1781068975077,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":666341,"timestamp":2261002842045,"id":88,"parentId":48,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":677275,"timestamp":2261002831157,"id":48,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1781068975077,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":672324,"timestamp":2261002837344,"id":66,"parentId":21,"tags":{},"startTime":1781068975084,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":688654,"timestamp":2261002821055,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1781068975067,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":672549,"timestamp":2261002839365,"id":73,"parentId":30,"tags":{},"startTime":1781068975086,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":685739,"timestamp":2261002826221,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1781068975072,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":672547,"timestamp":2261002842087,"id":91,"parentId":51,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":683352,"timestamp":2261002831326,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":673843,"timestamp":2261002845590,"id":93,"parentId":24,"tags":{},"startTime":1781068975092,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":696237,"timestamp":2261002823247,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1781068975070,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":673928,"timestamp":2261002846775,"id":94,"parentId":31,"tags":{},"startTime":1781068975093,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":694382,"timestamp":2261002826362,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1781068975073,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":676389,"timestamp":2261002848789,"id":96,"parentId":42,"tags":{},"startTime":1781068975095,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":696504,"timestamp":2261002828712,"id":42,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1781068975075,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":683414,"timestamp":2261002847645,"id":95,"parentId":40,"tags":{},"startTime":1781068975094,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":702830,"timestamp":2261002828280,"id":40,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1781068975075,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":689215,"timestamp":2261002842059,"id":89,"parentId":49,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":700101,"timestamp":2261002831220,"id":49,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1781068975077,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":695955,"timestamp":2261002839250,"id":72,"parentId":29,"tags":{},"startTime":1781068975086,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":709213,"timestamp":2261002826042,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1781068975072,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":693310,"timestamp":2261002842077,"id":90,"parentId":50,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":704153,"timestamp":2261002831269,"id":50,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":726501,"timestamp":2261002838684,"id":69,"parentId":26,"tags":{},"startTime":1781068975085,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":739680,"timestamp":2261002825588,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1781068975072,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":753736,"timestamp":2261002842100,"id":92,"parentId":54,"tags":{},"startTime":1781068975088,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":764097,"timestamp":2261002831822,"id":54,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":752944,"timestamp":2261002851462,"id":103,"parentId":58,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":772167,"timestamp":2261002832325,"id":58,"parentId":19,"tags":{"page":"/"},"startTime":1781068975079,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":761684,"timestamp":2261002851485,"id":104,"parentId":59,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":780812,"timestamp":2261002832458,"id":59,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1781068975079,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":764608,"timestamp":2261002855275,"id":105,"parentId":60,"tags":{},"startTime":1781068975102,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":787337,"timestamp":2261002832616,"id":60,"parentId":19,"tags":{"page":"/servers"},"startTime":1781068975079,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":768917,"timestamp":2261002851255,"id":97,"parentId":23,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":797293,"timestamp":2261002822934,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1781068975069,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":773164,"timestamp":2261002855298,"id":106,"parentId":61,"tags":{},"startTime":1781068975102,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":795787,"timestamp":2261002832727,"id":61,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1781068975079,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":782621,"timestamp":2261002851302,"id":99,"parentId":53,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":802345,"timestamp":2261002831703,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":782935,"timestamp":2261002851327,"id":101,"parentId":56,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":802263,"timestamp":2261002832040,"id":56,"parentId":19,"tags":{"page":"/node"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":779086,"timestamp":2261002855314,"id":107,"parentId":63,"tags":{},"startTime":1781068975102,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":801209,"timestamp":2261002833221,"id":63,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1781068975079,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":781481,"timestamp":2261002860637,"id":110,"parentId":62,"tags":{},"startTime":1781068975107,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":809266,"timestamp":2261002832898,"id":62,"parentId":19,"tags":{"page":"/settings"},"startTime":1781068975079,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":787106,"timestamp":2261002855329,"id":108,"parentId":64,"tags":{},"startTime":1781068975102,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":809163,"timestamp":2261002833320,"id":64,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1781068975080,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":787226,"timestamp":2261002855338,"id":109,"parentId":65,"tags":{},"startTime":1781068975102,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":809168,"timestamp":2261002833427,"id":65,"parentId":19,"tags":{"page":"/tasks"},"startTime":1781068975080,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":794185,"timestamp":2261002851341,"id":102,"parentId":57,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":813382,"timestamp":2261002832188,"id":57,"parentId":19,"tags":{"page":"/nodes"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":795110,"timestamp":2261002851284,"id":98,"parentId":52,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"}]
2
+ [{"name":"check-page","duration":815205,"timestamp":2261002831606,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"is-page-static","duration":814804,"timestamp":2261002851313,"id":100,"parentId":55,"tags":{},"startTime":1781068975098,"traceId":"f897edea9b4c8b59"},{"name":"check-page","duration":834285,"timestamp":2261002831878,"id":55,"parentId":19,"tags":{"page":"/messages"},"startTime":1781068975078,"traceId":"f897edea9b4c8b59"},{"name":"static-check","duration":848275,"timestamp":2261002817927,"id":19,"parentId":1,"tags":{},"startTime":1781068975064,"traceId":"f897edea9b4c8b59"},{"name":"write-routes-manifest","duration":558,"timestamp":2261003676169,"id":112,"parentId":1,"tags":{},"startTime":1781068975922,"traceId":"f897edea9b4c8b59"},{"name":"load-dotenv","duration":61,"timestamp":2261003689681,"id":115,"parentId":114,"tags":{},"startTime":1781068975936,"traceId":"f897edea9b4c8b59"},{"name":"run-export-path-map","duration":674,"timestamp":2261003692745,"id":116,"parentId":114,"tags":{},"startTime":1781068975939,"traceId":"f897edea9b4c8b59"},{"name":"next-export","duration":682496,"timestamp":2261003687798,"id":114,"parentId":1,"tags":{},"startTime":1781068975934,"traceId":"f897edea9b4c8b59"},{"name":"move-exported-app-not-found-","duration":560,"timestamp":2261004373952,"id":117,"parentId":113,"tags":{},"startTime":1781068976620,"traceId":"f897edea9b4c8b59"},{"name":"move-exported-app-global-error-","duration":382,"timestamp":2261004374605,"id":118,"parentId":113,"tags":{},"startTime":1781068976621,"traceId":"f897edea9b4c8b59"},{"name":"static-generation","duration":696233,"timestamp":2261003680707,"id":113,"parentId":1,"tags":{},"startTime":1781068975927,"traceId":"f897edea9b4c8b59"},{"name":"write-routes-manifest","duration":456,"timestamp":2261004377245,"id":119,"parentId":1,"tags":{},"startTime":1781068976624,"traceId":"f897edea9b4c8b59"},{"name":"print-tree-view","duration":5775,"timestamp":2261004386219,"id":120,"parentId":1,"tags":{},"startTime":1781068976632,"traceId":"f897edea9b4c8b59"},{"name":"write-route-bundle-stats","duration":19601,"timestamp":2261004392043,"id":121,"parentId":1,"tags":{},"startTime":1781068976638,"traceId":"f897edea9b4c8b59"},{"name":"telemetry-flush","duration":22527,"timestamp":2261004411675,"id":122,"parentId":1,"tags":{},"startTime":1781068976658,"traceId":"f897edea9b4c8b59"},{"name":"next-build","duration":26144941,"timestamp":2260978289295,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781068950536,"traceId":"f897edea9b4c8b59"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":61878259,"timestamp":1992005308993,"id":14,"parentId":1,"tags":{},"startTime":1780799977555,"traceId":"2f4a1f4ab942d75c"},{"name":"turbopack-build-events","duration":126,"timestamp":1992006157401,"id":15,"parentId":1,"tags":{},"startTime":1780799978404,"traceId":"2f4a1f4ab942d75c"},{"name":"run-typescript","duration":44080276,"timestamp":1992067230064,"id":16,"parentId":1,"tags":{},"startTime":1780800039476,"traceId":"2f4a1f4ab942d75c"},{"name":"static-check","duration":4409689,"timestamp":1992112366066,"id":19,"parentId":1,"tags":{},"startTime":1780800084615,"traceId":"2f4a1f4ab942d75c"},{"name":"static-generation","duration":2695422,"timestamp":1992116844310,"id":115,"parentId":1,"tags":{},"startTime":1780800089091,"traceId":"2f4a1f4ab942d75c"},{"name":"telemetry-flush","duration":117,"timestamp":1992119680222,"id":124,"parentId":1,"tags":{},"startTime":1780800091927,"traceId":"2f4a1f4ab942d75c"},{"name":"next-build","duration":114962897,"timestamp":1992004717467,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1780799976964,"traceId":"2f4a1f4ab942d75c"}]
1
+ [{"name":"run-turbopack","duration":13122951,"timestamp":2260978571971,"id":14,"parentId":1,"tags":{},"startTime":1781068950818,"traceId":"f897edea9b4c8b59"},{"name":"turbopack-build-events","duration":120,"timestamp":2260978929909,"id":15,"parentId":1,"tags":{},"startTime":1781068951176,"traceId":"f897edea9b4c8b59"},{"name":"run-typescript","duration":10882737,"timestamp":2260991705226,"id":16,"parentId":1,"tags":{},"startTime":1781068963952,"traceId":"f897edea9b4c8b59"},{"name":"static-check","duration":848275,"timestamp":2261002817927,"id":19,"parentId":1,"tags":{},"startTime":1781068975064,"traceId":"f897edea9b4c8b59"},{"name":"static-generation","duration":696233,"timestamp":2261003680707,"id":113,"parentId":1,"tags":{},"startTime":1781068975927,"traceId":"f897edea9b4c8b59"},{"name":"telemetry-flush","duration":22527,"timestamp":2261004411675,"id":122,"parentId":1,"tags":{},"startTime":1781068976658,"traceId":"f897edea9b4c8b59"},{"name":"next-build","duration":26144941,"timestamp":2260978289295,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781068950536,"traceId":"f897edea9b4c8b59"}]
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/admin" | "/login" | "/logs" | "/messages" | "/node" | "/nodes" | "/server-logs" | "/servers" | "/settings" | "/settings/networks" | "/settings/tokens" | "/tasks" | "/tasks/[id]"
5
- type AppRouteHandlerRoutes = "/api/anet/config" | "/api/auth/login" | "/api/auth/logout" | "/api/auth/v3" | "/api/hub/audit-log" | "/api/hub/auth" | "/api/hub/broadcast" | "/api/hub/events" | "/api/hub/health" | "/api/hub/inbox" | "/api/hub/license" | "/api/hub/messages" | "/api/hub/networks" | "/api/hub/nodes" | "/api/hub/register" | "/api/hub/send" | "/api/hub/server-logs" | "/api/hub/server/[hostname]/agents" | "/api/hub/server/[hostname]/health" | "/api/hub/servers" | "/api/hub/session" | "/api/hub/stats" | "/api/hub/status" | "/api/hub/task-events" | "/api/hub/tasks" | "/api/hub/tmux" | "/api/hub/tokens" | "/api/hub/upload"
5
+ type AppRouteHandlerRoutes = "/api/anet/config" | "/api/auth/login" | "/api/auth/logout" | "/api/auth/v3" | "/api/hub/audit-log" | "/api/hub/auth" | "/api/hub/broadcast" | "/api/hub/events" | "/api/hub/health" | "/api/hub/inbox" | "/api/hub/messages" | "/api/hub/networks" | "/api/hub/nodes" | "/api/hub/register" | "/api/hub/send" | "/api/hub/server-logs" | "/api/hub/server/[hostname]/agents" | "/api/hub/server/[hostname]/health" | "/api/hub/servers" | "/api/hub/session" | "/api/hub/stats" | "/api/hub/status" | "/api/hub/task-events" | "/api/hub/tasks" | "/api/hub/tmux" | "/api/hub/tokens" | "/api/hub/upload"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -23,7 +23,6 @@ interface ParamMap {
23
23
  "/api/hub/events": {}
24
24
  "/api/hub/health": {}
25
25
  "/api/hub/inbox": {}
26
- "/api/hub/license": {}
27
26
  "/api/hub/messages": {}
28
27
  "/api/hub/networks": {}
29
28
  "/api/hub/nodes": {}
@@ -263,15 +263,6 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
263
263
  type __Unused = __Check
264
264
  }
265
265
 
266
- // Validate ../../app/api/hub/license/route.ts
267
- {
268
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/hub/license">> = Specific
269
- const handler = {} as typeof import("../../app/api/hub/license/route.js")
270
- type __Check = __IsExpected<typeof handler>
271
- // @ts-ignore
272
- type __Unused = __Check
273
- }
274
-
275
266
  // Validate ../../app/api/hub/messages/route.ts
276
267
  {
277
268
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/hub/messages">> = Specific
@@ -1,10 +1,11 @@
1
1
  'use client';
2
2
 
3
3
  import { useState } from 'react';
4
+ import Link from 'next/link';
4
5
  import { useSessions, useHealth, useStats } from '../lib/hooks';
5
6
  import { timeAgo } from '../components/utils';
6
7
  import { AliasAvatar } from '../components/AliasAvatar';
7
- import { STATUS_CHIP_CLASS, SESSION_STATUS_CHIP_CLASS } from '../lib/status';
8
+ import { SESSION_STATUS_CHIP_CLASS } from '../lib/status';
8
9
 
9
10
  export default function AdminPage() {
10
11
  const { sessions } = useSessions();
@@ -73,7 +74,7 @@ export default function AdminPage() {
73
74
  const offlineNodes = sessions.filter(s => !sseFor(s));
74
75
 
75
76
  return (
76
- <div className="min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono">
77
+ <div className="min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6">
77
78
  <h1 className="text-2xl font-bold text-white mb-3 lg:ml-0 ml-10">Admin</h1>
78
79
 
79
80
  {/* Section anchor nav — same pattern as Settings r28; R2 of #190 mobile
@@ -82,14 +83,18 @@ export default function AdminPage() {
82
83
  read as inert labels rather than tappable jumps. Wrapping each in a
83
84
  visible bordered chip restores the affordance and lifts tap height
84
85
  to ~44px without changing the desktop hierarchy. */}
85
- <nav className="mb-8 flex flex-wrap gap-2 text-xs">
86
+ {/* #209 R31 (mobile vertical rhythm — same pattern as R28/R30):
87
+ chip-jump nav was mb-8 (32 px) — biggest single gap on /admin
88
+ above the fold. Drop to mb-4 sm:mb-8 — phones get 16 px, sm:
89
+ up keeps the original breathing room. */}
90
+ <nav className="mb-4 sm:mb-8 flex flex-wrap gap-2 text-xs">
86
91
  {[
87
92
  { href: '#status', label: 'Status' },
88
93
  { href: '#actions', label: 'Actions' },
89
94
  { href: '#users', label: 'Users' },
90
95
  ].map(a => (
91
96
  <a key={a.href} href={a.href}
92
- className="inline-flex min-h-[44px] items-center rounded-md border border-[#2a2a4a] bg-[#0a0a15]/60 px-3 py-2 text-gray-400 hover:border-cyan-500/50 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors">
97
+ className="inline-flex min-h-[44px] items-center rounded-md border border-[#26262b] bg-[#0e0e10]/60 px-3 py-2 text-gray-400 hover:border-cyan-500/50 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors">
93
98
  {a.label}
94
99
  </a>
95
100
  ))}
@@ -101,50 +106,60 @@ export default function AdminPage() {
101
106
  <div id="status" className="space-y-4 scroll-mt-6">
102
107
  <div className="flex items-center gap-2 px-1">
103
108
  <div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Status</div>
104
- <div className="flex-1 h-px bg-[#2a2a4a]" />
109
+ <div className="flex-1 h-px bg-[#26262b]" />
105
110
  </div>
106
111
  <div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
107
112
 
108
- {/* Server Overview */}
109
- <section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
110
- <h2 className="text-sm font-semibold text-gray-300 mb-4">Server Overview</h2>
113
+ {/* Server Overview.
114
+ #209 R42: same mobile density pattern R39 brought to the
115
+ Overview StatsBar 4-card grid — p-5 → p-4 sm:p-5 and
116
+ text-3xl numbers → text-2xl sm:text-3xl on phones. The
117
+ 2×2 numeric grid shrinks ~25 % on mobile (~60 px of fold
118
+ reclaimed) while reading identically on desktop. mb-4 on
119
+ the section heading also drops to mb-3 sm:mb-4. */}
120
+ <section className="bg-[#161618] border border-[#26262b] rounded-xl p-4 sm:p-5">
121
+ <h2 className="text-sm font-semibold text-gray-300 mb-3 sm:mb-4">Server Overview</h2>
111
122
  <div className="grid grid-cols-2 gap-4 text-sm">
112
123
  <div>
113
- <div className="text-3xl font-bold text-green-400 tabular-nums">{onlineNodes.length}</div>
124
+ <div className="text-2xl sm:text-3xl font-bold text-green-400 tabular-nums">{onlineNodes.length}</div>
114
125
  <div className="text-xs text-gray-500">Online</div>
115
126
  </div>
116
127
  <div>
117
- <div className="text-3xl font-bold text-gray-500 tabular-nums">{offlineNodes.length}</div>
128
+ <div className="text-2xl sm:text-3xl font-bold text-gray-500 tabular-nums">{offlineNodes.length}</div>
118
129
  <div className="text-xs text-gray-500">Offline</div>
119
130
  </div>
120
131
  <div>
121
- <div className="text-3xl font-bold text-cyan-400 tabular-nums">{health?.sse_connections ?? '--'}</div>
132
+ <div className="text-2xl sm:text-3xl font-bold text-cyan-400 tabular-nums">{health?.sse_connections ?? '--'}</div>
122
133
  <div className="text-xs text-gray-500">
123
134
  SSE Streams <span className="text-gray-600">· server</span>
124
135
  </div>
125
136
  </div>
126
137
  <div>
127
- <div className="text-3xl font-bold text-white tabular-nums">{stats?.tasks?.total ?? '--'}</div>
138
+ <div className="text-2xl sm:text-3xl font-bold text-white tabular-nums">{stats?.tasks?.total ?? '--'}</div>
128
139
  <div className="text-xs text-gray-500">Total Tasks</div>
129
140
  </div>
130
141
  </div>
131
- {stats?.tasks?.by_status && stats.tasks.by_status.length > 0 && (
132
- /* Round 90: adopt the shared STATUS_CHIP_CLASS palette so
133
- `acked`/`replied`/`failed` here color-match the same
134
- chips on /tasks, Overview r69, and /tasks/[id] r68.
135
- Unknown statuses fall back to the previous flat gray. */
136
- <div className="mt-4 flex flex-wrap gap-2">
137
- {stats.tasks.by_status.map((s: { status: string; count: number }) => (
138
- <span key={s.status} className={`text-xs px-2 py-1 rounded border ${STATUS_CHIP_CLASS[s.status] || 'bg-[#0a0a15] border-[#1a1a2a] text-gray-400'}`}>
139
- {s.status}: {s.count}
140
- </span>
141
- ))}
142
- </div>
143
- )}
142
+ {stats?.tasks?.by_status && stats.tasks.by_status.length > 0 && (() => {
143
+ /* #217 D7 (less is more): the 6-9 chip per-status wall
144
+ duplicated the /tasks tab strip. Same one-line summary
145
+ idiom as the Overview task line — running/failed are the
146
+ only numbers that drive action, the rest is on /tasks. */
147
+ const byStatus = Object.fromEntries(stats.tasks.by_status.map((s: { status: string; count: number }) => [s.status, s.count]));
148
+ return (
149
+ <div className="mt-4 flex items-center justify-between border-t border-[#26262b] pt-3 text-xs">
150
+ <div className="text-gray-400 tabular-nums">
151
+ <span className={byStatus['running'] ? 'text-green-400' : 'text-gray-500'}>{byStatus['running'] || 0} running</span>
152
+ <span className="text-gray-600"> &middot; </span>
153
+ <span className={byStatus['failed'] ? 'text-red-400' : 'text-gray-500'}>{byStatus['failed'] || 0} failed</span>
154
+ </div>
155
+ <Link href="/tasks" prefetch={false} className="text-cyan-400 hover:text-cyan-300">View all &rarr;</Link>
156
+ </div>
157
+ );
158
+ })()}
144
159
  </section>
145
160
 
146
161
  {/* Online Sessions — pulled into Status group (was below Send Task) */}
147
- <section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
162
+ <section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
148
163
  <h2 className="text-sm font-semibold text-gray-300 mb-4">
149
164
  Online Sessions <span className="text-gray-600">({onlineNodes.length})</span>
150
165
  </h2>
@@ -152,7 +167,7 @@ export default function AdminPage() {
152
167
  {onlineNodes.length === 0 ? (
153
168
  <div className="text-xs text-gray-600 text-center py-4">No online sessions</div>
154
169
  ) : onlineNodes.map(s => (
155
- <div key={s.alias} className="flex items-center gap-3 bg-[#0a0a15] rounded-lg px-3 py-2 border border-[#1a1a2a]">
170
+ <div key={s.alias} className="flex items-center gap-3 bg-[#0e0e10] rounded-lg px-3 py-2 border border-[#1c1c1f]">
156
171
  <AliasAvatar alias={s.alias} size={20} />
157
172
  <div className="min-w-0 flex-1">
158
173
  <div className="text-sm text-white font-medium truncate">{s.alias}</div>
@@ -177,28 +192,28 @@ export default function AdminPage() {
177
192
  <div id="actions" className="space-y-4 scroll-mt-6">
178
193
  <div className="flex items-center gap-2 px-1">
179
194
  <div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Actions</div>
180
- <div className="flex-1 h-px bg-[#2a2a4a]" />
195
+ <div className="flex-1 h-px bg-[#26262b]" />
181
196
  </div>
182
197
  {sessions.length === 0 ? (
183
198
  /* Round 77: Broadcast and Send Task both require at least one
184
199
  registered agent. Surfacing the empty cards above an empty
185
200
  fleet is the same dead-control class as the Overview
186
201
  Dispatch button (r70). Replace with a single inline hint. */
187
- <div className="bg-[#111128] border border-[#2a2a4a] rounded-xl px-5 py-4 text-sm text-gray-500">
202
+ <div className="bg-[#161618] border border-[#26262b] rounded-xl px-5 py-4 text-sm text-gray-500">
188
203
  Broadcast and Send Task become available after the first agent registers.
189
204
  </div>
190
205
  ) : (
191
206
  <div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
192
207
 
193
208
  {/* Broadcast */}
194
- <section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
209
+ <section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
195
210
  <h2 className="text-sm font-semibold text-gray-300 mb-4">Broadcast</h2>
196
211
  <textarea
197
212
  value={broadcastMsg}
198
213
  onChange={e => setBroadcastMsg(e.target.value)}
199
214
  placeholder="Message to all online nodes..."
200
215
  rows={3}
201
- className="w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none resize-none"
216
+ className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none resize-none"
202
217
  />
203
218
  <div className="flex justify-between items-center mt-3">
204
219
  <span className="text-xs text-gray-600">{broadcastMsg.length}/500</span>
@@ -214,12 +229,12 @@ export default function AdminPage() {
214
229
  </section>
215
230
 
216
231
  {/* Send Task */}
217
- <section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
232
+ <section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
218
233
  <h2 className="text-sm font-semibold text-gray-300 mb-4">Send Task</h2>
219
234
  <select
220
235
  value={taskTarget}
221
236
  onChange={e => setTaskTarget(e.target.value)}
222
- className="w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white focus:border-cyan-500/50 focus:outline-none mb-3"
237
+ className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-base sm:text-sm text-white focus:border-cyan-500/50 focus:outline-none mb-3"
223
238
  >
224
239
  <option value="">Select target node...</option>
225
240
  {onlineNodes.map(s => (
@@ -236,7 +251,7 @@ export default function AdminPage() {
236
251
  onChange={e => setTaskContent(e.target.value)}
237
252
  placeholder="Task content..."
238
253
  rows={3}
239
- className="w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none resize-none"
254
+ className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none resize-none"
240
255
  />
241
256
  <div className="flex justify-end mt-3">
242
257
  <button
@@ -258,12 +273,12 @@ export default function AdminPage() {
258
273
  <div id="users" className="space-y-4 scroll-mt-6">
259
274
  <div className="flex items-center gap-2 px-1">
260
275
  <div className="text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold">Users</div>
261
- <div className="flex-1 h-px bg-[#2a2a4a]" />
276
+ <div className="flex-1 h-px bg-[#26262b]" />
262
277
  </div>
263
278
  <div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
264
279
 
265
280
  {/* User Management (V3 Auth) */}
266
- <section className="bg-[#111128] border border-[#2a2a4a] rounded-xl p-5">
281
+ <section className="bg-[#161618] border border-[#26262b] rounded-xl p-5">
267
282
  <h2 className="text-sm font-semibold text-gray-300 mb-4">Register User (V3)</h2>
268
283
  <div className="space-y-3">
269
284
  <input
@@ -271,14 +286,14 @@ export default function AdminPage() {
271
286
  value={regUser}
272
287
  onChange={e => setRegUser(e.target.value)}
273
288
  placeholder="Username"
274
- className="w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"
289
+ className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"
275
290
  />
276
291
  <input
277
292
  type="password"
278
293
  value={regPass}
279
294
  onChange={e => setRegPass(e.target.value)}
280
295
  placeholder="Password"
281
- className="w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"
296
+ className="w-full bg-[#0e0e10] border border-[#26262b] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"
282
297
  />
283
298
  <button
284
299
  onClick={registerUser}
@@ -28,16 +28,18 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
28
28
  <Link
29
29
  href={`/node?alias=${encodeURIComponent(s.alias)}`}
30
30
  prefetch={false}
31
- className={`anet-agent-card group relative block rounded-xl border p-4 transition-all duration-300 cursor-pointer hover:-translate-y-0.5 ${
31
+ className={`anet-agent-card group relative block rounded-xl border p-3 sm:p-4 transition-all duration-300 cursor-pointer hover:-translate-y-0.5 ${
32
32
  hasSse
33
- ? `bg-[#111128] border-[#2a2a4a] hover:border-cyan-500/30 hover:shadow-lg ${cfg.glow}`
34
- : 'bg-[#0d0d1a] border-[#1a1a2a] opacity-40'
33
+ ? `bg-[#161618] border-[#26262b] hover:border-cyan-500/30 hover:shadow-lg ${cfg.glow}`
34
+ : 'bg-[#111113] border-[#1c1c1f] opacity-40'
35
35
  }`}
36
36
  >
37
37
  {/* Header: avatar + name + status. Avatar carries the alias→hue map
38
38
  shared with Messages/Nodes/Tasks/Overview; the live status dot
39
- stays as a small pulse-capable indicator. */}
40
- <div className="flex items-center justify-between mb-3">
39
+ stays as a small pulse-capable indicator. R5 of #190 mobile
40
+ polish: trim mb-3 → mb-2 sm:mb-3 so the card's vertical rhythm
41
+ tightens on narrow viewports. */}
42
+ <div className="flex items-center justify-between mb-2 sm:mb-3">
41
43
  <div className="flex items-center gap-2 min-w-0">
42
44
  <AliasAvatar alias={s.alias} size={22} />
43
45
  <span className="font-semibold text-white truncate text-sm" title={s.alias}>{s.alias}</span>
@@ -48,9 +50,12 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
48
50
  </span>
49
51
  </div>
50
52
 
51
- {/* Agent type badge */}
52
- <div className="flex items-center gap-2 mb-3">
53
- <span className="text-xs text-gray-600 bg-[#0a0a15] px-2 py-0.5 rounded border border-[#1a1a2a]">
53
+ {/* Agent type badge — hidden below sm because the runtime
54
+ (`claude-code` / `codex`) repeats across nearly every card and
55
+ chews ~28px per card × 99 sessions on Overview mobile. The
56
+ agent type stays one tap away on /node detail. */}
57
+ <div className="hidden sm:flex items-center gap-2 mb-3">
58
+ <span className="text-xs text-gray-600 bg-[#0e0e10] px-2 py-0.5 rounded border border-[#1c1c1f]">
54
59
  {s.agent || 'unknown'}
55
60
  </span>
56
61
  {hasSse && (
@@ -58,18 +63,23 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
58
63
  )}
59
64
  </div>
60
65
 
61
- {/* Task */}
66
+ {/* Task. Mobile: line-clamp-1 (one-liner) instead of two, and a
67
+ single-line padding (px-2 py-1) so the task strip is ~28px
68
+ rather than ~56px. The full task is still in the title
69
+ tooltip and on /node detail. */}
62
70
  {s.task ? (
63
- <div className="text-xs text-gray-400 bg-[#0a0a15] rounded-lg px-3 py-2 border border-[#1a1a2a] line-clamp-2" title={s.task}>
71
+ <div className="text-xs text-gray-400 bg-[#0e0e10] rounded-lg px-2 sm:px-3 py-1 sm:py-2 border border-[#1c1c1f] line-clamp-1 sm:line-clamp-2" title={s.task}>
64
72
  {s.task}
65
73
  </div>
66
74
  ) : (
67
75
  <div className="text-xs text-gray-700 italic">No active task</div>
68
76
  )}
69
77
 
70
- {/* Progress bar */}
78
+ {/* Progress bar — hidden below sm so an empty 0% bar doesn't
79
+ occupy 20px on every idle card. Visible from sm up where space
80
+ is no longer the constraint. */}
71
81
  {s.progress > 0 && (
72
- <div className="mt-3">
82
+ <div className="hidden sm:block mt-3">
73
83
  <div className="flex justify-between text-[10px] mb-1">
74
84
  <span className="text-gray-600">Progress</span>
75
85
  <span className={cfg.text}>{s.progress}%</span>
@@ -86,10 +96,21 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
86
96
  {/* Footer: time + chat + hover chevron affordance (round 44).
87
97
  The card is a <Link> so it's clickable everywhere, but with no
88
98
  visible cue users may not realise. Chevron appears on hover and
89
- slides right ~2px for a "drill in" hint. */}
90
- <div className="mt-3 flex justify-between items-center text-[10px] text-gray-600">
91
- <span className="truncate" title={s.server || ''}>{s.server || '--'}</span>
92
- <div className="flex items-center gap-2">
99
+ slides right ~2px for a "drill in" hint.
100
+ #209 R40: two small mobile tweaks
101
+ (1) the hover chevron is `hidden sm:inline-block` because
102
+ touch devices never trigger the :hover state, and the
103
+ 12 px wide reserved slot was just an empty void on
104
+ mobile — but flex with opacity-0 was still spending
105
+ 12 + 8 (gap) = 20 px on the right side of every card.
106
+ (2) mt-3 → mt-2 sm:mt-3 mirrors the same density pattern
107
+ R28 / R39 brought to the rest of the page. */}
108
+ <div className="mt-2 sm:mt-3 flex justify-between items-center text-[10px] text-gray-600">
109
+ {/* #217 D5 (Vincent: 乱七八糟的元素都可以删掉): the raw server
110
+ hostname (cloud instance IDs like iZrj93…) is noise on a
111
+ phone card — desktop keeps it, /node detail always has it. */}
112
+ <span className="hidden sm:inline truncate" title={s.server || ''}>{s.server || '--'}</span>
113
+ <div className="flex items-center gap-2 ml-auto">
93
114
  {onChat && hasSse && (
94
115
  <button
95
116
  onClick={e => { e.preventDefault(); e.stopPropagation(); onChat(s.alias); }}
@@ -101,7 +122,7 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
101
122
  <span>{timeAgo(s.updated_at)}</span>
102
123
  <svg
103
124
  aria-hidden
104
- className="w-3 h-3 text-gray-700 opacity-0 -translate-x-1 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-200"
125
+ className="hidden sm:inline-block w-3 h-3 text-gray-700 opacity-0 -translate-x-1 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-200"
105
126
  fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"
106
127
  >
107
128
  <path d="M9 18l6-6-6-6" />
@@ -20,7 +20,13 @@ export function AppShell({ children }: { children: React.ReactNode }) {
20
20
  return (
21
21
  <div className="flex min-h-[100dvh] max-w-full overflow-x-hidden">
22
22
  <Sidebar />
23
- <main className="flex-1 min-w-0 max-w-full overflow-x-hidden flex flex-col">
23
+ {/* R25 of #190: pair the existing bottom safe-area padding with a
24
+ top one so the HealthBanner clears the iOS status bar when
25
+ launched as an installed PWA (statusBarStyle: black-translucent
26
+ + viewportFit: cover, see app/layout.tsx). On non-PWA contexts
27
+ env(safe-area-inset-top) is 0, so this is a no-op for browser
28
+ tab visits. */}
29
+ <main className="flex-1 min-w-0 max-w-full overflow-x-hidden flex flex-col pt-[env(safe-area-inset-top)]">
24
30
  <HealthBanner />
25
31
  <div className="flex-1 min-w-0 max-w-full overflow-x-hidden pb-[calc(5rem+env(safe-area-inset-bottom))] lg:pb-0">{children}</div>
26
32
  </main>
@@ -191,7 +191,7 @@ export function ChatPopover({ alias, onClose }: ChatPopoverProps) {
191
191
  // Chromium retargets the click to the header — the button never fires.
192
192
  onPointerDown={(e) => e.stopPropagation()}
193
193
  aria-label="Close chat"
194
- className="text-[var(--fg-muted)] hover:text-[var(--fg)] p-1.5 rounded-lg hover:bg-[var(--bg-elevated)] shrink-0"
194
+ className="inline-flex min-h-[44px] min-w-[44px] items-center justify-center text-[var(--fg-muted)] hover:text-[var(--fg)] rounded-lg hover:bg-[var(--bg-elevated)] shrink-0"
195
195
  >
196
196
  <svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
197
197
  <path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />