@sleep2agi/agent-network-dashboard 0.5.4 → 0.5.5-preview.0

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 (179) 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 +37 -37
  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 +3 -3
  14. package/.next/server/app/_not-found.rsc +13 -13
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +7 -7
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  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 +3 -3
  23. package/.next/server/app/admin.rsc +15 -15
  24. package/.next/server/app/admin.segments/_full.segment.rsc +15 -15
  25. package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
  26. package/.next/server/app/admin.segments/_index.segment.rsc +7 -7
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +4 -4
  29. package/.next/server/app/admin.segments/admin.segment.rsc +3 -3
  30. package/.next/server/app/index.html +3 -3
  31. package/.next/server/app/index.rsc +15 -15
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  33. package/.next/server/app/index.segments/_full.segment.rsc +15 -15
  34. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  35. package/.next/server/app/index.segments/_index.segment.rsc +7 -7
  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 +15 -15
  40. package/.next/server/app/login.segments/_full.segment.rsc +15 -15
  41. package/.next/server/app/login.segments/_head.segment.rsc +4 -4
  42. package/.next/server/app/login.segments/_index.segment.rsc +7 -7
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  45. package/.next/server/app/login.segments/login.segment.rsc +3 -3
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +3 -3
  48. package/.next/server/app/logs.rsc +15 -15
  49. package/.next/server/app/logs.segments/_full.segment.rsc +15 -15
  50. package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
  51. package/.next/server/app/logs.segments/_index.segment.rsc +7 -7
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
  54. package/.next/server/app/logs.segments/logs.segment.rsc +3 -3
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +3 -3
  57. package/.next/server/app/messages.rsc +15 -15
  58. package/.next/server/app/messages.segments/_full.segment.rsc +15 -15
  59. package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
  60. package/.next/server/app/messages.segments/_index.segment.rsc +7 -7
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +4 -4
  63. package/.next/server/app/messages.segments/messages.segment.rsc +3 -3
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +3 -3
  66. package/.next/server/app/node.rsc +15 -15
  67. package/.next/server/app/node.segments/_full.segment.rsc +15 -15
  68. package/.next/server/app/node.segments/_head.segment.rsc +4 -4
  69. package/.next/server/app/node.segments/_index.segment.rsc +7 -7
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +4 -4
  72. package/.next/server/app/node.segments/node.segment.rsc +3 -3
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +3 -3
  75. package/.next/server/app/nodes.rsc +15 -15
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +15 -15
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +7 -7
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +4 -4
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +3 -3
  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 +3 -3
  85. package/.next/server/app/server-logs.rsc +15 -15
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +15 -15
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +4 -4
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +7 -7
  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 +4 -4
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +3 -3
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +3 -3
  94. package/.next/server/app/settings/networks.rsc +15 -15
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +15 -15
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +7 -7
  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 +4 -4
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +3 -3
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +3 -3
  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 +3 -3
  105. package/.next/server/app/settings/tokens.rsc +15 -15
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +15 -15
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +7 -7
  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 +4 -4
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +3 -3
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +3 -3
  113. package/.next/server/app/settings.html +3 -3
  114. package/.next/server/app/settings.rsc +15 -15
  115. package/.next/server/app/settings.segments/_full.segment.rsc +15 -15
  116. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  117. package/.next/server/app/settings.segments/_index.segment.rsc +7 -7
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  120. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  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 +3 -3
  124. package/.next/server/app/tasks.rsc +15 -15
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +15 -15
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +7 -7
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +4 -4
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +3 -3
  131. package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js +2 -2
  132. package/.next/server/chunks/ssr/[root-of-the-server]__030vg4n._.js.map +1 -1
  133. package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js +1 -1
  134. package/.next/server/chunks/ssr/[root-of-the-server]__0nw~zhp._.js.map +1 -1
  135. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  136. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  137. package/.next/server/chunks/ssr/[root-of-the-server]__0u5aqkk._.js +1 -1
  138. package/.next/server/chunks/ssr/[root-of-the-server]__0u5aqkk._.js.map +1 -1
  139. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
  140. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  141. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  142. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  143. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  144. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  145. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0mvyi-4._.js +1 -1
  146. package/.next/server/chunks/ssr/agent-network-dashboard_app_components_0mvyi-4._.js.map +1 -1
  147. package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js +1 -1
  148. package/.next/server/chunks/ssr/agent-network-dashboard_app_tasks_page_tsx_0mwxy4z._.js.map +1 -1
  149. package/.next/server/middleware-build-manifest.js +3 -3
  150. package/.next/server/pages/404.html +3 -3
  151. package/.next/server/pages/500.html +1 -1
  152. package/.next/static/chunks/{04wjx7vbxusw5.js → 0csnc6nlttr5s.js} +2 -2
  153. package/.next/static/chunks/0grmy4z.ylqtd.css +2 -0
  154. package/.next/static/chunks/0k68tvhf0o-sb.js +1 -0
  155. package/.next/static/chunks/{0k-c1chkvf78s.js → 0lc4e9o91uv.n.js} +1 -1
  156. package/.next/static/chunks/0prdn66k~zu45.js +1 -0
  157. package/.next/static/chunks/{09e8kxo30n5cf.js → 0qvb.hq86qp2g.js} +1 -1
  158. package/.next/static/chunks/0wyjrc0bekhiz.js +1 -0
  159. package/.next/static/chunks/0~ykmap37nw9d.js +1 -0
  160. package/.next/static/chunks/{089t1exs6apb8.js → 17r9h6cx1w6q-.js} +1 -1
  161. package/.next/trace +2 -2
  162. package/.next/trace-build +1 -1
  163. package/app/components/AppShell.tsx +2 -2
  164. package/app/components/CommandCenter.tsx +1 -1
  165. package/app/components/DispatchPanel.tsx +1 -1
  166. package/app/components/MobileNav.tsx +16 -3
  167. package/app/components/TaskChatPanel.tsx +81 -26
  168. package/app/components/TaskDrawer.tsx +1 -1
  169. package/app/layout.tsx +2 -2
  170. package/app/nodes/page.tsx +21 -151
  171. package/package.json +1 -1
  172. package/.next/static/chunks/01lmbsd37fybu.js +0 -1
  173. package/.next/static/chunks/03o.h6kvmw4l_.js +0 -1
  174. package/.next/static/chunks/0v2~nlpk-cx6v.css +0 -2
  175. package/.next/static/chunks/0xsye-9kffdi0.js +0 -1
  176. package/.next/static/chunks/0~rx_~akeylmq.js +0 -1
  177. /package/.next/static/{xq88BMF7fMUHWh10yaKTn → 7CjN6e7QM2eogH8RhsM1k}/_buildManifest.js +0 -0
  178. /package/.next/static/{xq88BMF7fMUHWh10yaKTn → 7CjN6e7QM2eogH8RhsM1k}/_clientMiddlewareManifest.js +0 -0
  179. /package/.next/static/{xq88BMF7fMUHWh10yaKTn → 7CjN6e7QM2eogH8RhsM1k}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":289,"timestamp":877470747767,"id":4,"parentId":1,"tags":{},"startTime":1779685442994,"traceId":"d41ec0a79aca731c"},{"name":"load-custom-routes","duration":470,"timestamp":877470748211,"id":5,"parentId":1,"tags":{},"startTime":1779685442994,"traceId":"d41ec0a79aca731c"},{"name":"create-dist-dir","duration":798,"timestamp":877470748733,"id":6,"parentId":1,"tags":{},"startTime":1779685442995,"traceId":"d41ec0a79aca731c"},{"name":"clean","duration":33520,"timestamp":877470750271,"id":7,"parentId":1,"tags":{},"startTime":1779685442997,"traceId":"d41ec0a79aca731c"},{"name":"discover-routes","duration":40351,"timestamp":877470868793,"id":8,"parentId":1,"tags":{},"startTime":1779685443115,"traceId":"d41ec0a79aca731c"},{"name":"create-root-mapping","duration":207,"timestamp":877470909231,"id":9,"parentId":1,"tags":{},"startTime":1779685443156,"traceId":"d41ec0a79aca731c"},{"name":"generate-route-types","duration":20764,"timestamp":877470912255,"id":10,"parentId":1,"tags":{},"startTime":1779685443159,"traceId":"d41ec0a79aca731c"},{"name":"public-dir-conflict-check","duration":112,"timestamp":877470933129,"id":11,"parentId":1,"tags":{},"startTime":1779685443179,"traceId":"d41ec0a79aca731c"},{"name":"generate-routes-manifest","duration":5574,"timestamp":877470933354,"id":12,"parentId":1,"tags":{},"startTime":1779685443180,"traceId":"d41ec0a79aca731c"},{"name":"run-turbopack","duration":7274250,"timestamp":877470945164,"id":14,"parentId":1,"tags":{},"startTime":1779685443191,"traceId":"d41ec0a79aca731c"},{"name":"turbopack-build-events","duration":85,"timestamp":877471296553,"id":15,"parentId":1,"tags":{},"startTime":1779685443543,"traceId":"d41ec0a79aca731c"},{"name":"run-typescript","duration":10883176,"timestamp":877478251907,"id":16,"parentId":1,"tags":{},"startTime":1779685450498,"traceId":"d41ec0a79aca731c"},{"name":"generate-required-server-files","duration":2356,"timestamp":877489136396,"id":18,"parentId":1,"tags":{},"startTime":1779685461383,"traceId":"d41ec0a79aca731c"},{"name":"check-static-error-page","duration":13083,"timestamp":877489310233,"id":20,"parentId":19,"tags":{},"startTime":1779685461557,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":448121,"timestamp":877489327740,"id":67,"parentId":22,"tags":{},"startTime":1779685461574,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":462904,"timestamp":877489313157,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779685461559,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":545000,"timestamp":877489327386,"id":66,"parentId":21,"tags":{},"startTime":1779685461574,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":560755,"timestamp":877489311735,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779685461558,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":564040,"timestamp":877489327948,"id":69,"parentId":26,"tags":{},"startTime":1779685461574,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":575953,"timestamp":877489316137,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779685461562,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":564856,"timestamp":877489328623,"id":73,"parentId":30,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":577046,"timestamp":877489316495,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":571530,"timestamp":877489328970,"id":76,"parentId":34,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":583571,"timestamp":877489317015,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":579827,"timestamp":877489328469,"id":72,"parentId":29,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":591997,"timestamp":877489316387,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":580617,"timestamp":877489328188,"id":71,"parentId":28,"tags":{},"startTime":1779685461574,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":592749,"timestamp":877489316311,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":589718,"timestamp":877489328885,"id":75,"parentId":33,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":601794,"timestamp":877489316914,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":590075,"timestamp":877489329042,"id":78,"parentId":36,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":601673,"timestamp":877489317505,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779685461564,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":598020,"timestamp":877489328080,"id":70,"parentId":27,"tags":{},"startTime":1779685461574,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":609954,"timestamp":877489316220,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779685461562,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":597231,"timestamp":877489329087,"id":80,"parentId":38,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":608617,"timestamp":877489317730,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779685461564,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":607473,"timestamp":877489328999,"id":77,"parentId":35,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":619407,"timestamp":877489317145,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":609958,"timestamp":877489329101,"id":81,"parentId":39,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":621341,"timestamp":877489317798,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779685461564,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":614194,"timestamp":877489329126,"id":83,"parentId":42,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":625329,"timestamp":877489318142,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779685461564,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":617307,"timestamp":877489329150,"id":85,"parentId":45,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":628027,"timestamp":877489318504,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779685461565,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":625925,"timestamp":877489329180,"id":87,"parentId":47,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":635121,"timestamp":877489320067,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779685461566,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":626224,"timestamp":877489329140,"id":84,"parentId":44,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":636996,"timestamp":877489318420,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779685461565,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":632952,"timestamp":877489328710,"id":74,"parentId":32,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":644916,"timestamp":877489316818,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":632690,"timestamp":877489329202,"id":89,"parentId":49,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":641694,"timestamp":877489320227,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779685461566,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":632844,"timestamp":877489329193,"id":88,"parentId":48,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":641914,"timestamp":877489320150,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779685461566,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":633003,"timestamp":877489329167,"id":86,"parentId":46,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":642315,"timestamp":877489319876,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779685461566,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":634140,"timestamp":877489329070,"id":79,"parentId":37,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":645648,"timestamp":877489317621,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779685461564,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":638209,"timestamp":877489327840,"id":68,"parentId":25,"tags":{},"startTime":1779685461574,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":650138,"timestamp":877489315972,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779685461562,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":638638,"timestamp":877489329215,"id":90,"parentId":50,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":647633,"timestamp":877489320282,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":638869,"timestamp":877489329251,"id":93,"parentId":55,"tags":{},"startTime":1779685461576,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":647242,"timestamp":877489320918,"id":55,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":642040,"timestamp":877489329228,"id":91,"parentId":51,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":650982,"timestamp":877489320353,"id":51,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":638491,"timestamp":877489333024,"id":94,"parentId":24,"tags":{},"startTime":1779685461579,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":657886,"timestamp":877489313668,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779685461560,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":637910,"timestamp":877489336222,"id":97,"parentId":43,"tags":{},"startTime":1779685461582,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":655952,"timestamp":877489318238,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779685461565,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":646298,"timestamp":877489335106,"id":96,"parentId":41,"tags":{},"startTime":1779685461581,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":663622,"timestamp":877489317928,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779685461564,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":659162,"timestamp":877489329112,"id":82,"parentId":40,"tags":{},"startTime":1779685461575,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":670487,"timestamp":877489317865,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779685461564,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":654283,"timestamp":877489334232,"id":95,"parentId":31,"tags":{},"startTime":1779685461581,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":671972,"timestamp":877489316577,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779685461563,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":656401,"timestamp":877489338706,"id":101,"parentId":56,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":674217,"timestamp":877489320970,"id":56,"parentId":19,"tags":{"page":"/messages"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":666696,"timestamp":877489329237,"id":92,"parentId":52,"tags":{},"startTime":1779685461576,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":675606,"timestamp":877489320424,"id":52,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":668133,"timestamp":877489338864,"id":104,"parentId":60,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":685245,"timestamp":877489321849,"id":60,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779685461568,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":680537,"timestamp":877489338895,"id":106,"parentId":63,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":696813,"timestamp":877489322734,"id":63,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779685461569,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":695589,"timestamp":877489338641,"id":98,"parentId":23,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":720884,"timestamp":877489313424,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779685461560,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":695584,"timestamp":877489338908,"id":107,"parentId":64,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":711635,"timestamp":877489322892,"id":64,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779685461569,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":708240,"timestamp":877489338917,"id":108,"parentId":65,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":724183,"timestamp":877489323056,"id":65,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779685461569,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":699989,"timestamp":877489347417,"id":109,"parentId":62,"tags":{},"startTime":1779685461594,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":725145,"timestamp":877489322292,"id":62,"parentId":19,"tags":{"page":"/settings"},"startTime":1779685461569,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":710390,"timestamp":877489338681,"id":99,"parentId":53,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":728418,"timestamp":877489320717,"id":53,"parentId":19,"tags":{"page":"/login"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":691336,"timestamp":877489361125,"id":110,"parentId":59,"tags":{},"startTime":1779685461607,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":731076,"timestamp":877489321441,"id":59,"parentId":19,"tags":{"page":"/"},"startTime":1779685461568,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":713881,"timestamp":877489338719,"id":102,"parentId":57,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":731492,"timestamp":877489321132,"id":57,"parentId":19,"tags":{"page":"/node"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":725170,"timestamp":877489338879,"id":105,"parentId":61,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":742043,"timestamp":877489322076,"id":61,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779685461568,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":726822,"timestamp":877489338697,"id":100,"parentId":54,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"}]
2
- [{"name":"check-page","duration":745012,"timestamp":877489320818,"id":54,"parentId":19,"tags":{"page":"/logs"},"startTime":1779685461567,"traceId":"d41ec0a79aca731c"},{"name":"is-page-static","duration":731186,"timestamp":877489338849,"id":103,"parentId":58,"tags":{},"startTime":1779685461585,"traceId":"d41ec0a79aca731c"},{"name":"check-page","duration":748823,"timestamp":877489321280,"id":58,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779685461568,"traceId":"d41ec0a79aca731c"},{"name":"static-check","duration":761078,"timestamp":877489309071,"id":19,"parentId":1,"tags":{},"startTime":1779685461555,"traceId":"d41ec0a79aca731c"},{"name":"write-routes-manifest","duration":794,"timestamp":877490080404,"id":112,"parentId":1,"tags":{},"startTime":1779685462327,"traceId":"d41ec0a79aca731c"},{"name":"load-dotenv","duration":59,"timestamp":877490093852,"id":115,"parentId":114,"tags":{},"startTime":1779685462340,"traceId":"d41ec0a79aca731c"},{"name":"run-export-path-map","duration":781,"timestamp":877490096906,"id":116,"parentId":114,"tags":{},"startTime":1779685462343,"traceId":"d41ec0a79aca731c"},{"name":"next-export","duration":646857,"timestamp":877490092446,"id":114,"parentId":1,"tags":{},"startTime":1779685462339,"traceId":"d41ec0a79aca731c"},{"name":"move-exported-app-not-found-","duration":735,"timestamp":877490742909,"id":117,"parentId":113,"tags":{},"startTime":1779685462989,"traceId":"d41ec0a79aca731c"},{"name":"move-exported-app-global-error-","duration":462,"timestamp":877490743778,"id":118,"parentId":113,"tags":{},"startTime":1779685462990,"traceId":"d41ec0a79aca731c"},{"name":"static-generation","duration":661253,"timestamp":877490085097,"id":113,"parentId":1,"tags":{},"startTime":1779685462331,"traceId":"d41ec0a79aca731c"},{"name":"write-routes-manifest","duration":463,"timestamp":877490746592,"id":119,"parentId":1,"tags":{},"startTime":1779685462993,"traceId":"d41ec0a79aca731c"},{"name":"print-tree-view","duration":4262,"timestamp":877490768312,"id":120,"parentId":1,"tags":{},"startTime":1779685463015,"traceId":"d41ec0a79aca731c"},{"name":"write-route-bundle-stats","duration":14033,"timestamp":877490772625,"id":121,"parentId":1,"tags":{},"startTime":1779685463019,"traceId":"d41ec0a79aca731c"},{"name":"telemetry-flush","duration":18253,"timestamp":877490786712,"id":122,"parentId":1,"tags":{},"startTime":1779685463033,"traceId":"d41ec0a79aca731c"},{"name":"next-build","duration":20109518,"timestamp":877470695501,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779685442942,"traceId":"d41ec0a79aca731c"}]
1
+ [{"name":"generate-buildid","duration":334,"timestamp":889426950244,"id":4,"parentId":1,"tags":{},"startTime":1779697399197,"traceId":"e0c5a5c630f6a765"},{"name":"load-custom-routes","duration":539,"timestamp":889426950743,"id":5,"parentId":1,"tags":{},"startTime":1779697399197,"traceId":"e0c5a5c630f6a765"},{"name":"create-dist-dir","duration":766,"timestamp":889426951333,"id":6,"parentId":1,"tags":{},"startTime":1779697399198,"traceId":"e0c5a5c630f6a765"},{"name":"clean","duration":33272,"timestamp":889426952861,"id":7,"parentId":1,"tags":{},"startTime":1779697399199,"traceId":"e0c5a5c630f6a765"},{"name":"discover-routes","duration":25214,"timestamp":889427069344,"id":8,"parentId":1,"tags":{},"startTime":1779697399316,"traceId":"e0c5a5c630f6a765"},{"name":"create-root-mapping","duration":125,"timestamp":889427094629,"id":9,"parentId":1,"tags":{},"startTime":1779697399341,"traceId":"e0c5a5c630f6a765"},{"name":"generate-route-types","duration":20982,"timestamp":889427097859,"id":10,"parentId":1,"tags":{},"startTime":1779697399344,"traceId":"e0c5a5c630f6a765"},{"name":"public-dir-conflict-check","duration":174,"timestamp":889427118966,"id":11,"parentId":1,"tags":{},"startTime":1779697399365,"traceId":"e0c5a5c630f6a765"},{"name":"generate-routes-manifest","duration":5268,"timestamp":889427119335,"id":12,"parentId":1,"tags":{},"startTime":1779697399366,"traceId":"e0c5a5c630f6a765"},{"name":"run-turbopack","duration":6049919,"timestamp":889427131492,"id":14,"parentId":1,"tags":{},"startTime":1779697399378,"traceId":"e0c5a5c630f6a765"},{"name":"turbopack-build-events","duration":136,"timestamp":889427473914,"id":15,"parentId":1,"tags":{},"startTime":1779697399720,"traceId":"e0c5a5c630f6a765"},{"name":"run-typescript","duration":9851532,"timestamp":889433191567,"id":16,"parentId":1,"tags":{},"startTime":1779697405438,"traceId":"e0c5a5c630f6a765"},{"name":"generate-required-server-files","duration":2245,"timestamp":889443044206,"id":18,"parentId":1,"tags":{},"startTime":1779697415290,"traceId":"e0c5a5c630f6a765"},{"name":"check-static-error-page","duration":16702,"timestamp":889443223900,"id":20,"parentId":19,"tags":{},"startTime":1779697415470,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":454300,"timestamp":889443245033,"id":67,"parentId":22,"tags":{},"startTime":1779697415491,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":472241,"timestamp":889443227264,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779697415474,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":557809,"timestamp":889443245600,"id":71,"parentId":28,"tags":{},"startTime":1779697415492,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":572398,"timestamp":889443231122,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779697415477,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":563265,"timestamp":889443246153,"id":74,"parentId":32,"tags":{},"startTime":1779697415492,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":577650,"timestamp":889443231863,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779697415478,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":592661,"timestamp":889443246078,"id":73,"parentId":30,"tags":{},"startTime":1779697415492,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":607559,"timestamp":889443231403,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779697415478,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":594004,"timestamp":889443245461,"id":70,"parentId":27,"tags":{},"startTime":1779697415492,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":608691,"timestamp":889443230951,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779697415477,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":595614,"timestamp":889443244530,"id":66,"parentId":21,"tags":{},"startTime":1779697415491,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":614464,"timestamp":889443225747,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779697415472,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":595883,"timestamp":889443245349,"id":69,"parentId":26,"tags":{},"startTime":1779697415492,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":610494,"timestamp":889443230821,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779697415477,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":601194,"timestamp":889443246421,"id":77,"parentId":35,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":615357,"timestamp":889443232306,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779697415479,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":601683,"timestamp":889443246314,"id":75,"parentId":33,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":616039,"timestamp":889443232034,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779697415478,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":614395,"timestamp":889443246389,"id":76,"parentId":34,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":628660,"timestamp":889443232179,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779697415478,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":624006,"timestamp":889443246464,"id":79,"parentId":37,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":637481,"timestamp":889443233064,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779697415479,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":626063,"timestamp":889443246482,"id":80,"parentId":38,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":639380,"timestamp":889443233227,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779697415480,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":626969,"timestamp":889443245877,"id":72,"parentId":29,"tags":{},"startTime":1779697415492,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":641644,"timestamp":889443231247,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779697415478,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":632322,"timestamp":889443246546,"id":84,"parentId":44,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":644583,"timestamp":889443234339,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779697415481,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":634820,"timestamp":889443246510,"id":81,"parentId":39,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":648014,"timestamp":889443233360,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779697415480,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":639523,"timestamp":889443246582,"id":87,"parentId":47,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":651430,"timestamp":889443234721,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779697415481,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":639718,"timestamp":889443246569,"id":86,"parentId":46,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":651722,"timestamp":889443234609,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779697415481,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":641005,"timestamp":889443246534,"id":83,"parentId":42,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":653713,"timestamp":889443233882,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779697415480,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":644941,"timestamp":889443246599,"id":88,"parentId":48,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":656725,"timestamp":889443234861,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779697415481,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":652039,"timestamp":889443246524,"id":82,"parentId":40,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":665129,"timestamp":889443233477,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779697415480,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":654328,"timestamp":889443246614,"id":89,"parentId":49,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":664427,"timestamp":889443236561,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779697415483,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":654528,"timestamp":889443246636,"id":91,"parentId":51,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":664353,"timestamp":889443236843,"id":51,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1779697415483,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":656341,"timestamp":889443246624,"id":90,"parentId":50,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":666479,"timestamp":889443236734,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779697415483,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":659021,"timestamp":889443245221,"id":68,"parentId":25,"tags":{},"startTime":1779697415491,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":673847,"timestamp":889443230636,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779697415477,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":658926,"timestamp":889443246657,"id":93,"parentId":55,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":667877,"timestamp":889443237745,"id":55,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1779697415484,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":657243,"timestamp":889443255150,"id":97,"parentId":43,"tags":{},"startTime":1779697415501,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":678396,"timestamp":889443234041,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779697415480,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":667872,"timestamp":889443246649,"id":92,"parentId":52,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":677588,"timestamp":889443236978,"id":52,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779697415483,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":665765,"timestamp":889443253151,"id":95,"parentId":31,"tags":{},"startTime":1779697415499,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":687412,"timestamp":889443231565,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779697415478,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":685854,"timestamp":889443246560,"id":85,"parentId":45,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":697994,"timestamp":889443234483,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779697415481,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":680824,"timestamp":889443251849,"id":94,"parentId":24,"tags":{},"startTime":1779697415498,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":704869,"timestamp":889443227840,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779697415474,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":695961,"timestamp":889443254033,"id":96,"parentId":41,"tags":{},"startTime":1779697415500,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":716485,"timestamp":889443233604,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779697415480,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":711576,"timestamp":889443246441,"id":78,"parentId":36,"tags":{},"startTime":1779697415493,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":725251,"timestamp":889443232836,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779697415479,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":715724,"timestamp":889443257881,"id":104,"parentId":60,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":735284,"timestamp":889443239097,"id":60,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779697415485,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":724720,"timestamp":889443257891,"id":105,"parentId":61,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":743358,"timestamp":889443239313,"id":61,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779697415486,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":732416,"timestamp":889443257685,"id":99,"parentId":53,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":752778,"timestamp":889443237403,"id":53,"parentId":19,"tags":{"page":"/login"},"startTime":1779697415484,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":732662,"timestamp":889443257904,"id":106,"parentId":63,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":750637,"timestamp":889443239980,"id":63,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779697415486,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":734895,"timestamp":889443257709,"id":100,"parentId":54,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":755071,"timestamp":889443237580,"id":54,"parentId":19,"tags":{"page":"/logs"},"startTime":1779697415484,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":736960,"timestamp":889443257652,"id":98,"parentId":23,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":767074,"timestamp":889443227583,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779697415474,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":733117,"timestamp":889443267146,"id":109,"parentId":62,"tags":{},"startTime":1779697415513,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":760786,"timestamp":889443239520,"id":62,"parentId":19,"tags":{"page":"/settings"},"startTime":1779697415486,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":742989,"timestamp":889443257930,"id":108,"parentId":65,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":760625,"timestamp":889443240334,"id":65,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779697415487,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":722038,"timestamp":889443280735,"id":110,"parentId":59,"tags":{},"startTime":1779697415527,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":764299,"timestamp":889443238508,"id":59,"parentId":19,"tags":{"page":"/"},"startTime":1779697415485,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":746879,"timestamp":889443257917,"id":107,"parentId":64,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":764671,"timestamp":889443240172,"id":64,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779697415486,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":762513,"timestamp":889443257727,"id":101,"parentId":56,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":782461,"timestamp":889443237841,"id":56,"parentId":19,"tags":{"page":"/messages"},"startTime":1779697415484,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":765029,"timestamp":889443257861,"id":103,"parentId":58,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"}]
2
+ [{"name":"check-page","duration":784869,"timestamp":889443238292,"id":58,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779697415485,"traceId":"e0c5a5c630f6a765"},{"name":"is-page-static","duration":769282,"timestamp":889443257737,"id":102,"parentId":57,"tags":{},"startTime":1779697415504,"traceId":"e0c5a5c630f6a765"},{"name":"check-page","duration":788991,"timestamp":889443238066,"id":57,"parentId":19,"tags":{"page":"/node"},"startTime":1779697415484,"traceId":"e0c5a5c630f6a765"},{"name":"static-check","duration":804392,"timestamp":889443222699,"id":19,"parentId":1,"tags":{},"startTime":1779697415469,"traceId":"e0c5a5c630f6a765"},{"name":"write-routes-manifest","duration":828,"timestamp":889444033450,"id":112,"parentId":1,"tags":{},"startTime":1779697416280,"traceId":"e0c5a5c630f6a765"},{"name":"load-dotenv","duration":45,"timestamp":889444048612,"id":115,"parentId":114,"tags":{},"startTime":1779697416295,"traceId":"e0c5a5c630f6a765"},{"name":"run-export-path-map","duration":751,"timestamp":889444051676,"id":116,"parentId":114,"tags":{},"startTime":1779697416298,"traceId":"e0c5a5c630f6a765"},{"name":"next-export","duration":602809,"timestamp":889444047252,"id":114,"parentId":1,"tags":{},"startTime":1779697416294,"traceId":"e0c5a5c630f6a765"},{"name":"move-exported-app-not-found-","duration":631,"timestamp":889444653767,"id":117,"parentId":113,"tags":{},"startTime":1779697416900,"traceId":"e0c5a5c630f6a765"},{"name":"move-exported-app-global-error-","duration":504,"timestamp":889444654513,"id":118,"parentId":113,"tags":{},"startTime":1779697416901,"traceId":"e0c5a5c630f6a765"},{"name":"static-generation","duration":616309,"timestamp":889444040651,"id":113,"parentId":1,"tags":{},"startTime":1779697416287,"traceId":"e0c5a5c630f6a765"},{"name":"write-routes-manifest","duration":425,"timestamp":889444657204,"id":119,"parentId":1,"tags":{},"startTime":1779697416903,"traceId":"e0c5a5c630f6a765"},{"name":"print-tree-view","duration":5365,"timestamp":889444674874,"id":120,"parentId":1,"tags":{},"startTime":1779697416921,"traceId":"e0c5a5c630f6a765"},{"name":"write-route-bundle-stats","duration":13685,"timestamp":889444680279,"id":121,"parentId":1,"tags":{},"startTime":1779697416927,"traceId":"e0c5a5c630f6a765"},{"name":"telemetry-flush","duration":25071,"timestamp":889444693996,"id":122,"parentId":1,"tags":{},"startTime":1779697416940,"traceId":"e0c5a5c630f6a765"},{"name":"next-build","duration":17824921,"timestamp":889426894181,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779697399140,"traceId":"e0c5a5c630f6a765"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":7274250,"timestamp":877470945164,"id":14,"parentId":1,"tags":{},"startTime":1779685443191,"traceId":"d41ec0a79aca731c"},{"name":"turbopack-build-events","duration":85,"timestamp":877471296553,"id":15,"parentId":1,"tags":{},"startTime":1779685443543,"traceId":"d41ec0a79aca731c"},{"name":"run-typescript","duration":10883176,"timestamp":877478251907,"id":16,"parentId":1,"tags":{},"startTime":1779685450498,"traceId":"d41ec0a79aca731c"},{"name":"static-check","duration":761078,"timestamp":877489309071,"id":19,"parentId":1,"tags":{},"startTime":1779685461555,"traceId":"d41ec0a79aca731c"},{"name":"static-generation","duration":661253,"timestamp":877490085097,"id":113,"parentId":1,"tags":{},"startTime":1779685462331,"traceId":"d41ec0a79aca731c"},{"name":"telemetry-flush","duration":18253,"timestamp":877490786712,"id":122,"parentId":1,"tags":{},"startTime":1779685463033,"traceId":"d41ec0a79aca731c"},{"name":"next-build","duration":20109518,"timestamp":877470695501,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779685442942,"traceId":"d41ec0a79aca731c"}]
1
+ [{"name":"run-turbopack","duration":6049919,"timestamp":889427131492,"id":14,"parentId":1,"tags":{},"startTime":1779697399378,"traceId":"e0c5a5c630f6a765"},{"name":"turbopack-build-events","duration":136,"timestamp":889427473914,"id":15,"parentId":1,"tags":{},"startTime":1779697399720,"traceId":"e0c5a5c630f6a765"},{"name":"run-typescript","duration":9851532,"timestamp":889433191567,"id":16,"parentId":1,"tags":{},"startTime":1779697405438,"traceId":"e0c5a5c630f6a765"},{"name":"static-check","duration":804392,"timestamp":889443222699,"id":19,"parentId":1,"tags":{},"startTime":1779697415469,"traceId":"e0c5a5c630f6a765"},{"name":"static-generation","duration":616309,"timestamp":889444040651,"id":113,"parentId":1,"tags":{},"startTime":1779697416287,"traceId":"e0c5a5c630f6a765"},{"name":"telemetry-flush","duration":25071,"timestamp":889444693996,"id":122,"parentId":1,"tags":{},"startTime":1779697416940,"traceId":"e0c5a5c630f6a765"},{"name":"next-build","duration":17824921,"timestamp":889426894181,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779697399140,"traceId":"e0c5a5c630f6a765"}]
@@ -18,11 +18,11 @@ export function AppShell({ children }: { children: React.ReactNode }) {
18
18
  }
19
19
 
20
20
  return (
21
- <div className="flex min-h-screen">
21
+ <div className="flex min-h-[100dvh]">
22
22
  <Sidebar />
23
23
  <main className="flex-1 min-w-0 flex flex-col">
24
24
  <HealthBanner />
25
- <div className="flex-1 min-w-0 pb-20 lg:pb-0">{children}</div>
25
+ <div className="flex-1 min-w-0 pb-[calc(5rem+env(safe-area-inset-bottom))] lg:pb-0">{children}</div>
26
26
  </main>
27
27
  <MobileNav />
28
28
  <CommandPalette />
@@ -26,7 +26,7 @@ export function CommandCenter({ tabs, activeTab, onOpenTab, onCloseTab, onSetAct
26
26
  <div className="fixed inset-0 bg-black/30 z-40 lg:hidden" onClick={onClose} />
27
27
 
28
28
  {/* Panel */}
29
- <div className="fixed top-0 right-0 h-full w-full lg:w-[500px] bg-[#0a0a1a] border-l border-[#2a2a4a] z-50 flex flex-col shadow-2xl shadow-black/60 animate-slide-in">
29
+ <div className="fixed top-0 right-0 h-[100dvh] w-full lg:w-[500px] bg-[#0a0a1a] border-l border-[#2a2a4a] z-50 flex flex-col shadow-2xl shadow-black/60 animate-slide-in">
30
30
  {/* Tab bar */}
31
31
  <div className="flex items-center border-b border-[#2a2a4a] bg-[#0d0d1a] overflow-x-auto">
32
32
  <div className="flex-1 flex min-w-0">
@@ -73,7 +73,7 @@ export function DispatchPanel({ sessions, onClose }: DispatchPanelProps) {
73
73
  return (
74
74
  <>
75
75
  <div className="fixed inset-0 bg-black/50 z-40 anet-fade-in" onClick={onClose} />
76
- <div className="fixed inset-4 lg:inset-x-[15%] lg:inset-y-[5%] bg-[#0a0a1a] border border-[#2a2a4a] rounded-2xl z-50 flex flex-col shadow-2xl shadow-black/70 overflow-hidden anet-fade-in">
76
+ <div className="fixed inset-x-3 inset-y-3 max-h-[calc(100dvh-1.5rem)] lg:inset-x-[15%] lg:inset-y-[5%] lg:max-h-none bg-[#0a0a1a] border border-[#2a2a4a] rounded-2xl z-50 flex flex-col shadow-2xl shadow-black/70 overflow-hidden anet-fade-in">
77
77
  {/* Header */}
78
78
  <div className="flex items-center justify-between px-6 py-4 border-b border-[#2a2a4a] bg-[#0d0d1a]">
79
79
  <div>
@@ -4,19 +4,21 @@ import Link from 'next/link';
4
4
  import { usePathname } from 'next/navigation';
5
5
 
6
6
  const MOBILE_NAV_ITEMS = [
7
- { href: '/', label: 'Home', icon: 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6' },
7
+ { href: '/', label: 'Overview', icon: 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6' },
8
8
  { href: '/tasks', label: 'Tasks', icon: 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4' },
9
9
  { href: '/nodes', label: 'Agents', icon: 'M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01' },
10
10
  { href: '/messages', label: 'Chats', icon: 'M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z' },
11
- { href: '/logs', label: 'Status', icon: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z' },
12
11
  ];
13
12
 
14
13
  export function MobileNav() {
15
14
  const pathname = usePathname();
16
15
  const isActive = (href: string) => href === '/' ? pathname === '/' : pathname.startsWith(href);
16
+ const openCommand = () => {
17
+ window.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', metaKey: true, ctrlKey: true }));
18
+ };
17
19
 
18
20
  return (
19
- <nav className="fixed inset-x-0 bottom-0 z-40 border-t border-[#2a2a4a] bg-[#0d0d1a]/95 px-1 pb-[calc(env(safe-area-inset-bottom)+0.25rem)] pt-1.5 backdrop-blur lg:hidden">
21
+ <nav className="fixed inset-x-0 bottom-0 z-40 border-t border-[#2a2a4a] bg-[#0d0d1a]/95 px-1 pb-[calc(env(safe-area-inset-bottom)+0.35rem)] pt-1.5 backdrop-blur lg:hidden">
20
22
  <div className="mx-auto grid max-w-md grid-cols-5 gap-1">
21
23
  {MOBILE_NAV_ITEMS.map(item => {
22
24
  const active = isActive(item.href);
@@ -39,6 +41,17 @@ export function MobileNav() {
39
41
  </Link>
40
42
  );
41
43
  })}
44
+ <button
45
+ type="button"
46
+ onClick={openCommand}
47
+ className="flex min-h-12 flex-col items-center justify-center gap-0.5 rounded-xl px-1 text-[10px] text-gray-500 transition-colors active:bg-[#1a1a3a] active:text-gray-200"
48
+ aria-label="Open command palette"
49
+ >
50
+ <svg className="h-5 w-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={1.6}>
51
+ <path strokeLinecap="round" strokeLinejoin="round" d="M12 3v3m0 12v3m9-9h-3M6 12H3m15.364-6.364l-2.121 2.121M7.757 16.243l-2.121 2.121m12.728 0l-2.121-2.121M7.757 7.757L5.636 5.636M12 8.5A3.5 3.5 0 1112 15.5 3.5 3.5 0 0112 8.5z" />
52
+ </svg>
53
+ <span className="max-w-full truncate">Command</span>
54
+ </button>
42
55
  </div>
43
56
  </nav>
44
57
  );
@@ -13,6 +13,31 @@ interface ChatTask {
13
13
  content: string;
14
14
  result: string;
15
15
  created_at: string;
16
+ completed_at?: string;
17
+ }
18
+
19
+ type ChatEvent =
20
+ | { kind: 'task'; task: ChatTask; at: string }
21
+ | { kind: 'reply'; task: ChatTask; at: string };
22
+
23
+ function eventTime(value?: string) {
24
+ if (!value) return 0;
25
+ return new Date(value.replace(' ', 'T') + (value.includes('T') ? '' : 'Z')).getTime() || 0;
26
+ }
27
+
28
+ function formatTimestamp(value?: string) {
29
+ if (!value) return '--';
30
+ const d = new Date(value.replace(' ', 'T') + (value.includes('T') ? '' : 'Z'));
31
+ if (Number.isNaN(d.getTime())) return value;
32
+ return d.toLocaleString(undefined, { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' });
33
+ }
34
+
35
+ function quotePreview(text: string, max = 140) {
36
+ const compact = (text || '')
37
+ .replace(/\[Dashboard 附件[\s\S]*$/m, '[附件]')
38
+ .replace(/\s+/g, ' ')
39
+ .trim();
40
+ return compact.length > max ? `${compact.slice(0, max)}…` : compact;
16
41
  }
17
42
 
18
43
  function extractAttachmentPreviews(text: string): string[] {
@@ -433,11 +458,24 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
433
458
  el.style.height = Math.min(el.scrollHeight, 150) + 'px';
434
459
  };
435
460
 
461
+ const chatEvents: ChatEvent[] = messages
462
+ .flatMap((task): ChatEvent[] => {
463
+ const events: ChatEvent[] = [{ kind: 'task', task, at: task.created_at }];
464
+ if (task.result) events.push({ kind: 'reply', task, at: task.completed_at || task.created_at });
465
+ return events;
466
+ })
467
+ .sort((a, b) => {
468
+ const delta = eventTime(a.at) - eventTime(b.at);
469
+ if (delta !== 0) return delta;
470
+ if (a.task.task_id !== b.task.task_id) return a.task.task_id.localeCompare(b.task.task_id);
471
+ return a.kind === 'task' ? -1 : 1;
472
+ });
473
+
436
474
  // Inline mode: just the chat content, no panel chrome
437
475
  const chatContent = (
438
476
  <>
439
477
  {/* Messages area */}
440
- <div className="flex-1 overflow-y-auto px-4 py-4 space-y-4">
478
+ <div className="flex-1 overflow-y-auto px-3 py-3 sm:px-4 sm:py-4 space-y-3 sm:space-y-4">
441
479
  {!historyLoaded && (
442
480
  <div className="flex justify-center py-8">
443
481
  <div className="w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin" />
@@ -451,7 +489,8 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
451
489
  </div>
452
490
  )}
453
491
 
454
- {messages.map((m) => {
492
+ {chatEvents.map((event) => {
493
+ const m = event.task;
455
494
  // Distinguish task source so users can tell when a peer agent
456
495
  // forwarded a task vs when they themselves sent it from Dashboard.
457
496
  const fromUser = !m.from_name || m.from_name === 'Dashboard' || m.from_name === 'api' || m.from_name === 'hub';
@@ -459,11 +498,41 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
459
498
  const senderBadge = fromUser
460
499
  ? null
461
500
  : <span className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded bg-purple-500/15 border border-purple-500/30 text-[9px] text-purple-300 font-medium">↳ {m.from_name}</span>;
501
+ if (event.kind === 'reply') {
502
+ return (
503
+ <div key={`${m.task_id}:reply`} className="flex justify-start">
504
+ <div className="max-w-[92%] sm:max-w-[85%] bg-green-500/8 border border-green-500/15 rounded-2xl rounded-bl-md px-3 py-2.5 sm:px-4 shadow-sm">
505
+ <div className="flex items-center justify-between gap-2 mb-2">
506
+ <div className="flex items-center gap-1.5 min-w-0">
507
+ {m.to_name && <AliasAvatar alias={m.to_name} size={14} />}
508
+ <span className="text-[10px] text-[var(--fg)] font-medium truncate">{m.to_name}</span>
509
+ <span className="text-[9px] text-green-300/70">replied</span>
510
+ </div>
511
+ <span className="shrink-0 rounded-md bg-black/20 px-1.5 py-0.5 text-[9px] text-[var(--fg-dim)]" title={event.at}>
512
+ {timeAgo(event.at)} · {formatTimestamp(event.at)}
513
+ </span>
514
+ </div>
515
+ <div className="mb-2 rounded-lg border-l-2 border-cyan-400/40 bg-black/20 px-2.5 py-1.5">
516
+ <div className="text-[9px] text-cyan-300/80">
517
+ 引用 {senderLabel} 的任务 · {formatTimestamp(m.created_at)}
518
+ </div>
519
+ <div className="mt-0.5 max-h-10 overflow-hidden text-[11px] leading-5 text-[var(--fg-muted)]">
520
+ {quotePreview(m.content) || 'No content'}
521
+ </div>
522
+ </div>
523
+ <div className="text-[13px] text-[var(--fg)]">
524
+ <MarkdownContent text={m.result} />
525
+ <AttachmentPreviews text={m.result} />
526
+ </div>
527
+ </div>
528
+ </div>
529
+ );
530
+ }
462
531
  return (
463
- <div key={m.task_id} className="space-y-2">
532
+ <div key={`${m.task_id}:task`} className="space-y-2">
464
533
  {/* Outgoing task — labeled with origin so peer-forwarded tasks are obvious */}
465
534
  <div className="flex justify-end">
466
- <div className="max-w-[85%] bg-cyan-500/8 border border-cyan-500/15 rounded-2xl rounded-br-md px-4 py-2.5 shadow-sm">
535
+ <div className="max-w-[92%] sm:max-w-[85%] bg-cyan-500/8 border border-cyan-500/15 rounded-2xl rounded-br-md px-3 py-2.5 sm:px-4 shadow-sm">
467
536
  <div className="flex items-center gap-2 mb-1">
468
537
  <span className={`text-[10px] font-medium ${fromUser ? 'text-cyan-400' : 'text-purple-300'}`}>{senderLabel}</span>
469
538
  {!fromUser && <span className="text-[9px] text-[var(--fg-dim)]">forwarded to {m.to_name}</span>}
@@ -472,32 +541,18 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
472
541
  <MarkdownContent text={m.content} />
473
542
  <AttachmentPreviews text={m.content} />
474
543
  </div>
475
- <div className="flex items-center justify-between mt-1.5 gap-3">
544
+ <div className="flex flex-wrap items-center justify-between mt-1.5 gap-2 sm:gap-3">
476
545
  <StatusBar status={m.status} />
477
546
  <div className="flex items-center gap-2 shrink-0">
478
547
  {senderBadge}
479
- <span className="text-[9px] text-[var(--fg-dim)]">{timeAgo(m.created_at)}</span>
548
+ <span className="rounded-md bg-black/15 px-1.5 py-0.5 text-[9px] text-[var(--fg-dim)]" title={m.created_at}>
549
+ {timeAgo(m.created_at)} · {formatTimestamp(m.created_at)}
550
+ </span>
480
551
  </div>
481
552
  </div>
482
553
  </div>
483
554
  </div>
484
555
 
485
- {/* Incoming reply */}
486
- {m.result && (
487
- <div className="flex justify-start">
488
- <div className="max-w-[85%] bg-green-500/8 border border-green-500/15 rounded-2xl rounded-bl-md px-4 py-2.5 shadow-sm">
489
- <div className="flex items-center gap-1.5 mb-1.5">
490
- {m.to_name && <AliasAvatar alias={m.to_name} size={14} />}
491
- <span className="text-[10px] text-[var(--fg)] font-medium">{m.to_name}</span>
492
- </div>
493
- <div className="text-[13px] text-[var(--fg)]">
494
- <MarkdownContent text={m.result} />
495
- <AttachmentPreviews text={m.result} />
496
- </div>
497
- </div>
498
- </div>
499
- )}
500
-
501
556
  {/* Typing indicator when running */}
502
557
  {m.status === 'running' && !m.result && (
503
558
  <div className="flex justify-start">
@@ -517,7 +572,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
517
572
  </div>
518
573
 
519
574
  {/* Input area */}
520
- <div className="border-t border-[var(--border)] bg-[var(--bg-secondary)] px-4 py-3">
575
+ <div className="border-t border-[var(--border)] bg-[var(--bg-secondary)] px-3 py-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))] sm:px-4">
521
576
  <div className="flex items-end gap-2">
522
577
  <div className="flex-1 relative">
523
578
  {/* @ mention dropdown */}
@@ -540,7 +595,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
540
595
  onPaste={handlePaste}
541
596
  placeholder={`Message ${alias}...`}
542
597
  rows={1}
543
- className="w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-xl px-4 py-2.5 pr-24 text-sm text-[var(--fg)] placeholder-[var(--fg-dim)] focus:border-cyan-500/40 focus:outline-none resize-none transition-colors"
598
+ className="w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-xl px-3 py-2.5 pr-24 text-base sm:px-4 sm:text-sm text-[var(--fg)] placeholder-[var(--fg-dim)] focus:border-cyan-500/40 focus:outline-none resize-none transition-colors"
544
599
  />
545
600
  <div className="absolute right-2 bottom-1.5 flex items-center gap-1">
546
601
  <label className="p-1 text-[var(--fg-dim)] hover:text-cyan-300 cursor-pointer rounded hover:bg-cyan-500/10" title="Attach image">
@@ -585,7 +640,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
585
640
  ))}
586
641
  </div>
587
642
  )}
588
- <div className="flex justify-between text-[9px] text-[var(--fg-dim)] mt-1.5">
643
+ <div className="hidden sm:flex justify-between text-[9px] text-[var(--fg-dim)] mt-1.5">
589
644
  <span>{input.includes('@') ? `Sending to: ${targetAlias}` : `Type @ to mention another node`}</span>
590
645
  <span>Enter to send · paste image</span>
591
646
  </div>
@@ -600,7 +655,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
600
655
  return (
601
656
  <>
602
657
  <div className="fixed inset-0 bg-black/30 z-40 lg:hidden anet-fade-in" onClick={onClose} />
603
- <div className="fixed top-0 right-0 h-full w-full lg:w-[500px] bg-[var(--bg)] border-l border-[var(--border)] z-50 flex flex-col shadow-2xl shadow-black/60 animate-slide-in">
658
+ <div className="fixed top-0 right-0 h-[100dvh] w-full lg:w-[500px] bg-[var(--bg)] border-l border-[var(--border)] z-50 flex flex-col shadow-2xl shadow-black/60 animate-slide-in">
604
659
  {/* Header */}
605
660
  <div className="flex items-center justify-between px-4 py-3 border-b border-[var(--border)] bg-[var(--bg-secondary)]">
606
661
  <div className="flex items-center gap-3">
@@ -81,7 +81,7 @@ export function TaskDrawer({ taskId, onClose }: TaskDrawerProps) {
81
81
  return (
82
82
  <>
83
83
  <div className="fixed inset-0 bg-black/30 z-40 anet-fade-in" onClick={onClose} />
84
- <div className="fixed top-0 right-0 h-full w-full lg:w-[500px] bg-[#0a0a1a] border-l border-[#2a2a4a] z-50 flex flex-col shadow-2xl shadow-black/60 overflow-y-auto animate-slide-in">
84
+ <div className="fixed top-0 right-0 h-[100dvh] w-full lg:w-[500px] bg-[#0a0a1a] border-l border-[#2a2a4a] z-50 flex flex-col shadow-2xl shadow-black/60 overflow-y-auto animate-slide-in">
85
85
  {/* Header */}
86
86
  <div className="flex items-center justify-between px-5 py-4 border-b border-[#2a2a4a] bg-[#0d0d1a] sticky top-0">
87
87
  <div>
package/app/layout.tsx CHANGED
@@ -30,8 +30,8 @@ export const metadata: Metadata = {
30
30
  export const viewport: Viewport = {
31
31
  width: "device-width",
32
32
  initialScale: 1,
33
- maximumScale: 1,
34
- userScalable: false,
33
+ maximumScale: 5,
34
+ userScalable: true,
35
35
  themeColor: "#0a0a1a",
36
36
  };
37
37