@sleep2agi/agent-network-dashboard 0.4.6-preview.4 → 0.4.6-preview.6

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 (163) 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 +9 -9
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +2 -2
  15. package/.next/server/app/_not-found.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/admin.html +2 -2
  24. package/.next/server/app/admin.rsc +2 -2
  25. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  26. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  29. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  30. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  31. package/.next/server/app/index.html +2 -2
  32. package/.next/server/app/index.rsc +3 -3
  33. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  34. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  35. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  36. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  37. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  38. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/login.html +2 -2
  40. package/.next/server/app/login.rsc +3 -3
  41. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  42. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  46. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  47. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/logs.html +2 -2
  49. package/.next/server/app/logs.rsc +2 -2
  50. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  51. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  52. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  54. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  55. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  56. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/messages.html +2 -2
  58. package/.next/server/app/messages.rsc +2 -2
  59. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  60. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  61. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  63. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  64. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  65. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/node.html +2 -2
  67. package/.next/server/app/node.rsc +3 -3
  68. package/.next/server/app/node.segments/_full.segment.rsc +3 -3
  69. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  70. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  72. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +2 -2
  73. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  74. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/nodes.html +2 -2
  76. package/.next/server/app/nodes.rsc +3 -3
  77. package/.next/server/app/nodes.segments/_full.segment.rsc +3 -3
  78. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  79. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  81. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +2 -2
  82. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  83. package/.next/server/app/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/server-logs.html +2 -2
  86. package/.next/server/app/server-logs.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  88. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  91. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  94. package/.next/server/app/settings/networks.html +2 -2
  95. package/.next/server/app/settings/networks.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  97. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  98. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  100. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  102. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  103. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  105. package/.next/server/app/settings/tokens.html +2 -2
  106. package/.next/server/app/settings/tokens.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  108. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  109. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  111. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  113. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  114. package/.next/server/app/settings.html +2 -2
  115. package/.next/server/app/settings.rsc +3 -3
  116. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  117. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  121. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  122. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  124. package/.next/server/app/tasks.html +2 -2
  125. package/.next/server/app/tasks.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  127. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  128. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  130. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  131. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js +1 -1
  133. package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js.map +1 -1
  134. package/.next/server/chunks/ssr/_0nne7mz._.js +1 -1
  135. package/.next/server/chunks/ssr/_0nne7mz._.js.map +1 -1
  136. package/.next/server/chunks/ssr/app_0aum_g5._.js +1 -1
  137. package/.next/server/chunks/ssr/app_0aum_g5._.js.map +1 -1
  138. package/.next/server/chunks/ssr/app_0esuljp._.js +1 -1
  139. package/.next/server/chunks/ssr/app_0esuljp._.js.map +1 -1
  140. package/.next/server/middleware-build-manifest.js +3 -3
  141. package/.next/server/pages/404.html +2 -2
  142. package/.next/server/pages/500.html +1 -1
  143. package/.next/server/server-reference-manifest.js +1 -1
  144. package/.next/server/server-reference-manifest.json +1 -1
  145. package/.next/static/chunks/09vpkiy8u1fd9.js +1 -0
  146. package/.next/static/chunks/0_rmxom9~1lmk.css +2 -0
  147. package/.next/static/chunks/{0sxaea_g05hbz.js → 0cduea_g_p_y..js} +1 -1
  148. package/.next/static/chunks/{0c1bp~g7.8ru..js → 0j6t.m1a6._pk.js} +1 -1
  149. package/.next/static/chunks/{04p678v0aui~f.js → 0rtpz4a-9r6ab.js} +1 -1
  150. package/.next/trace +2 -2
  151. package/.next/trace-build +1 -1
  152. package/app/components/ChatPopover.tsx +6 -6
  153. package/app/components/TaskChatPanel.tsx +39 -39
  154. package/app/components/TopoGraph.tsx +14 -1
  155. package/app/page.tsx +18 -1
  156. package/package.json +1 -1
  157. package/scripts/chat-theme-test.mjs +97 -0
  158. package/scripts/topo-rename-test.mjs +106 -0
  159. package/.next/static/chunks/07epshqd2k_l_.js +0 -1
  160. package/.next/static/chunks/09n9xs.6dvvo2.css +0 -2
  161. /package/.next/static/{q2pRPNeRoK1vOr1EX-qOG → 5BgbN6YWZJU6fk3Z0cE8n}/_buildManifest.js +0 -0
  162. /package/.next/static/{q2pRPNeRoK1vOr1EX-qOG → 5BgbN6YWZJU6fk3Z0cE8n}/_clientMiddlewareManifest.js +0 -0
  163. /package/.next/static/{q2pRPNeRoK1vOr1EX-qOG → 5BgbN6YWZJU6fk3Z0cE8n}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94867,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.4"],94867)},89954,e=>{"use strict";var t=e.i(18050),r=e.i(71645),a=e.i(94867);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94867,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.6"],94867)},89954,e=>{"use strict";var t=e.i(18050),r=e.i(71645),a=e.i(94867);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":292,"timestamp":416861402401,"id":4,"parentId":1,"tags":{},"startTime":1778788347227,"traceId":"a47bdb9bd1bc6ec6"},{"name":"load-custom-routes","duration":524,"timestamp":416861402843,"id":5,"parentId":1,"tags":{},"startTime":1778788347228,"traceId":"a47bdb9bd1bc6ec6"},{"name":"create-dist-dir","duration":319,"timestamp":416861403411,"id":6,"parentId":1,"tags":{},"startTime":1778788347228,"traceId":"a47bdb9bd1bc6ec6"},{"name":"clean","duration":504,"timestamp":416861404434,"id":7,"parentId":1,"tags":{},"startTime":1778788347229,"traceId":"a47bdb9bd1bc6ec6"},{"name":"discover-routes","duration":21358,"timestamp":416861493033,"id":8,"parentId":1,"tags":{},"startTime":1778788347318,"traceId":"a47bdb9bd1bc6ec6"},{"name":"create-root-mapping","duration":128,"timestamp":416861514457,"id":9,"parentId":1,"tags":{},"startTime":1778788347339,"traceId":"a47bdb9bd1bc6ec6"},{"name":"generate-route-types","duration":22648,"timestamp":416861516998,"id":10,"parentId":1,"tags":{},"startTime":1778788347342,"traceId":"a47bdb9bd1bc6ec6"},{"name":"public-dir-conflict-check","duration":112,"timestamp":416861539835,"id":11,"parentId":1,"tags":{},"startTime":1778788347365,"traceId":"a47bdb9bd1bc6ec6"},{"name":"generate-routes-manifest","duration":4923,"timestamp":416861540120,"id":12,"parentId":1,"tags":{},"startTime":1778788347365,"traceId":"a47bdb9bd1bc6ec6"},{"name":"run-turbopack","duration":9469000,"timestamp":416861550985,"id":14,"parentId":1,"tags":{},"startTime":1778788347376,"traceId":"a47bdb9bd1bc6ec6"},{"name":"turbopack-build-events","duration":93,"timestamp":416861910104,"id":15,"parentId":1,"tags":{},"startTime":1778788347735,"traceId":"a47bdb9bd1bc6ec6"},{"name":"run-typescript","duration":8837699,"timestamp":416871033411,"id":16,"parentId":1,"tags":{},"startTime":1778788356858,"traceId":"a47bdb9bd1bc6ec6"},{"name":"generate-required-server-files","duration":2498,"timestamp":416879872058,"id":18,"parentId":1,"tags":{},"startTime":1778788365697,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-static-error-page","duration":16241,"timestamp":416879947238,"id":20,"parentId":19,"tags":{},"startTime":1778788365772,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":341637,"timestamp":416879966380,"id":62,"parentId":22,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":358590,"timestamp":416879949565,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778788365774,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":418199,"timestamp":416879966464,"id":63,"parentId":25,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":430819,"timestamp":416879953919,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778788365779,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":424674,"timestamp":416879966644,"id":65,"parentId":27,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":437182,"timestamp":416879954196,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778788365779,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":452108,"timestamp":416879966679,"id":66,"parentId":28,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":464550,"timestamp":416879954298,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778788365779,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":463803,"timestamp":416879966715,"id":67,"parentId":29,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":476204,"timestamp":416879954386,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778788365779,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":464130,"timestamp":416879966604,"id":64,"parentId":26,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":476661,"timestamp":416879954099,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778788365779,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":468504,"timestamp":416879966749,"id":68,"parentId":30,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":480729,"timestamp":416879954594,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778788365779,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":468712,"timestamp":416879966787,"id":69,"parentId":32,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":480603,"timestamp":416879954919,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778788365780,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":471044,"timestamp":416879966890,"id":70,"parentId":33,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":482951,"timestamp":416879955031,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778788365780,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":473264,"timestamp":416879966936,"id":71,"parentId":34,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":485133,"timestamp":416879955117,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778788365780,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":476391,"timestamp":416879966021,"id":61,"parentId":21,"tags":{},"startTime":1778788365791,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":494145,"timestamp":416879948309,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778788365773,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":475710,"timestamp":416879966953,"id":72,"parentId":35,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":487493,"timestamp":416879955196,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778788365780,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":477778,"timestamp":416879967025,"id":73,"parentId":36,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":489294,"timestamp":416879955554,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778788365780,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":479101,"timestamp":416879967064,"id":75,"parentId":38,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":490430,"timestamp":416879955772,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778788365780,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":481210,"timestamp":416879967070,"id":76,"parentId":39,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":492490,"timestamp":416879955830,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":483055,"timestamp":416879967076,"id":77,"parentId":40,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":494275,"timestamp":416879955892,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":485488,"timestamp":416879967082,"id":78,"parentId":41,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":496669,"timestamp":416879955954,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":487160,"timestamp":416879967088,"id":79,"parentId":42,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":498250,"timestamp":416879956032,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":487941,"timestamp":416879967093,"id":80,"parentId":43,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":498971,"timestamp":416879956107,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":491351,"timestamp":416879967104,"id":82,"parentId":45,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":502268,"timestamp":416879956232,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":491556,"timestamp":416879967099,"id":81,"parentId":44,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":502508,"timestamp":416879956172,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":496637,"timestamp":416879967114,"id":84,"parentId":47,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":507431,"timestamp":416879956376,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":500721,"timestamp":416879967109,"id":83,"parentId":46,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":511571,"timestamp":416879956312,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":502031,"timestamp":416879967119,"id":85,"parentId":48,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":512752,"timestamp":416879956458,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":502608,"timestamp":416879970350,"id":87,"parentId":31,"tags":{},"startTime":1778788365795,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":518332,"timestamp":416879954687,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778788365779,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":503649,"timestamp":416879969578,"id":86,"parentId":24,"tags":{},"startTime":1778788365794,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":522330,"timestamp":416879950936,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778788365776,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":541708,"timestamp":416879967055,"id":74,"parentId":37,"tags":{},"startTime":1778788365792,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":553151,"timestamp":416879955677,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778788365780,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":520322,"timestamp":416879995931,"id":90,"parentId":50,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":559399,"timestamp":416879956928,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778788365782,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":521903,"timestamp":416879995920,"id":89,"parentId":49,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":561072,"timestamp":416879956801,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778788365781,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":524848,"timestamp":416879995937,"id":91,"parentId":51,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":563751,"timestamp":416879957077,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778788365782,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":527555,"timestamp":416879995880,"id":88,"parentId":23,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":572752,"timestamp":416879950729,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778788365775,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":529143,"timestamp":416879995945,"id":92,"parentId":52,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":567874,"timestamp":416879957255,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778788365782,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":532362,"timestamp":416879995953,"id":93,"parentId":53,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":570947,"timestamp":416879957431,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778788365782,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":536118,"timestamp":416879995967,"id":95,"parentId":56,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":570845,"timestamp":416879961292,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778788365786,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":536522,"timestamp":416879995959,"id":94,"parentId":55,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":571481,"timestamp":416879961093,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778788365786,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":538487,"timestamp":416879995976,"id":96,"parentId":58,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":574093,"timestamp":416879962989,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778788365788,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":543769,"timestamp":416879996035,"id":99,"parentId":54,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":580240,"timestamp":416879959604,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778788365784,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":546581,"timestamp":416879995981,"id":97,"parentId":59,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":579463,"timestamp":416879963146,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778788365788,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":549584,"timestamp":416879996042,"id":100,"parentId":57,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":584249,"timestamp":416879961418,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778788365786,"traceId":"a47bdb9bd1bc6ec6"},{"name":"is-page-static","duration":550047,"timestamp":416879995991,"id":98,"parentId":60,"tags":{},"startTime":1778788365821,"traceId":"a47bdb9bd1bc6ec6"},{"name":"check-page","duration":582831,"timestamp":416879963247,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778788365788,"traceId":"a47bdb9bd1bc6ec6"},{"name":"static-check","duration":599692,"timestamp":416879946421,"id":19,"parentId":1,"tags":{},"startTime":1778788365771,"traceId":"a47bdb9bd1bc6ec6"},{"name":"write-routes-manifest","duration":531,"timestamp":416880552347,"id":102,"parentId":1,"tags":{},"startTime":1778788366377,"traceId":"a47bdb9bd1bc6ec6"},{"name":"load-dotenv","duration":60,"timestamp":416880565654,"id":105,"parentId":104,"tags":{},"startTime":1778788366390,"traceId":"a47bdb9bd1bc6ec6"},{"name":"run-export-path-map","duration":734,"timestamp":416880568454,"id":106,"parentId":104,"tags":{},"startTime":1778788366393,"traceId":"a47bdb9bd1bc6ec6"},{"name":"next-export","duration":600302,"timestamp":416880564332,"id":104,"parentId":1,"tags":{},"startTime":1778788366389,"traceId":"a47bdb9bd1bc6ec6"},{"name":"move-exported-app-not-found-","duration":752,"timestamp":416881168700,"id":107,"parentId":103,"tags":{},"startTime":1778788366993,"traceId":"a47bdb9bd1bc6ec6"},{"name":"move-exported-app-global-error-","duration":928,"timestamp":416881169600,"id":108,"parentId":103,"tags":{},"startTime":1778788366994,"traceId":"a47bdb9bd1bc6ec6"}]
2
- [{"name":"static-generation","duration":617382,"timestamp":416880558022,"id":103,"parentId":1,"tags":{},"startTime":1778788366383,"traceId":"a47bdb9bd1bc6ec6"},{"name":"write-routes-manifest","duration":527,"timestamp":416881175611,"id":109,"parentId":1,"tags":{},"startTime":1778788367000,"traceId":"a47bdb9bd1bc6ec6"},{"name":"print-tree-view","duration":4917,"timestamp":416881185744,"id":110,"parentId":1,"tags":{},"startTime":1778788367010,"traceId":"a47bdb9bd1bc6ec6"},{"name":"write-route-bundle-stats","duration":13041,"timestamp":416881190701,"id":111,"parentId":1,"tags":{},"startTime":1778788367015,"traceId":"a47bdb9bd1bc6ec6"},{"name":"telemetry-flush","duration":146462,"timestamp":416881203781,"id":112,"parentId":1,"tags":{},"startTime":1778788367028,"traceId":"a47bdb9bd1bc6ec6"},{"name":"next-build","duration":20000035,"timestamp":416861350248,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778788347175,"traceId":"a47bdb9bd1bc6ec6"}]
1
+ [{"name":"generate-buildid","duration":336,"timestamp":427232134247,"id":4,"parentId":1,"tags":{},"startTime":1778798717959,"traceId":"3a8a85d59c9f3a28"},{"name":"load-custom-routes","duration":514,"timestamp":427232134735,"id":5,"parentId":1,"tags":{},"startTime":1778798717959,"traceId":"3a8a85d59c9f3a28"},{"name":"create-dist-dir","duration":4125,"timestamp":427232135296,"id":6,"parentId":1,"tags":{},"startTime":1778798717960,"traceId":"3a8a85d59c9f3a28"},{"name":"clean","duration":621,"timestamp":427232140289,"id":7,"parentId":1,"tags":{},"startTime":1778798717965,"traceId":"3a8a85d59c9f3a28"},{"name":"discover-routes","duration":9078,"timestamp":427232231130,"id":8,"parentId":1,"tags":{},"startTime":1778798718056,"traceId":"3a8a85d59c9f3a28"},{"name":"create-root-mapping","duration":143,"timestamp":427232240294,"id":9,"parentId":1,"tags":{},"startTime":1778798718065,"traceId":"3a8a85d59c9f3a28"},{"name":"generate-route-types","duration":33831,"timestamp":427232242806,"id":10,"parentId":1,"tags":{},"startTime":1778798718068,"traceId":"3a8a85d59c9f3a28"},{"name":"public-dir-conflict-check","duration":103,"timestamp":427232276818,"id":11,"parentId":1,"tags":{},"startTime":1778798718102,"traceId":"3a8a85d59c9f3a28"},{"name":"generate-routes-manifest","duration":4537,"timestamp":427232277100,"id":12,"parentId":1,"tags":{},"startTime":1778798718102,"traceId":"3a8a85d59c9f3a28"},{"name":"run-turbopack","duration":9260945,"timestamp":427232286971,"id":14,"parentId":1,"tags":{},"startTime":1778798718112,"traceId":"3a8a85d59c9f3a28"},{"name":"turbopack-build-events","duration":77,"timestamp":427232628871,"id":15,"parentId":1,"tags":{},"startTime":1778798718454,"traceId":"3a8a85d59c9f3a28"},{"name":"run-typescript","duration":8762421,"timestamp":427241554793,"id":16,"parentId":1,"tags":{},"startTime":1778798727379,"traceId":"3a8a85d59c9f3a28"},{"name":"generate-required-server-files","duration":3069,"timestamp":427250318252,"id":18,"parentId":1,"tags":{},"startTime":1778798736143,"traceId":"3a8a85d59c9f3a28"},{"name":"check-static-error-page","duration":16186,"timestamp":427250392117,"id":20,"parentId":19,"tags":{},"startTime":1778798736217,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":313984,"timestamp":427250412086,"id":62,"parentId":22,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":331900,"timestamp":427250394295,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778798736219,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":399153,"timestamp":427250412423,"id":64,"parentId":26,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":413324,"timestamp":427250398334,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778798736223,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":409127,"timestamp":427250411600,"id":61,"parentId":21,"tags":{},"startTime":1778798736236,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":427652,"timestamp":427250393138,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778798736218,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":417851,"timestamp":427250412489,"id":65,"parentId":27,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":431983,"timestamp":427250398419,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778798736223,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":434647,"timestamp":427250412601,"id":67,"parentId":29,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":448737,"timestamp":427250398585,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778798736223,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":438426,"timestamp":427250412652,"id":68,"parentId":30,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":452374,"timestamp":427250398783,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778798736223,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":443125,"timestamp":427250412706,"id":69,"parentId":32,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":456799,"timestamp":427250399099,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778798736224,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":448822,"timestamp":427250412866,"id":70,"parentId":33,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":462564,"timestamp":427250399186,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778798736224,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":458090,"timestamp":427250412545,"id":66,"parentId":28,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":472210,"timestamp":427250398500,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778798736223,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":457931,"timestamp":427250412942,"id":71,"parentId":34,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":471642,"timestamp":427250399258,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778798736224,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":465374,"timestamp":427250412968,"id":72,"parentId":35,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":479078,"timestamp":427250399339,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778798736224,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":466167,"timestamp":427250413086,"id":73,"parentId":36,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":479626,"timestamp":427250399676,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778798736224,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":472969,"timestamp":427250413130,"id":75,"parentId":38,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":486276,"timestamp":427250399886,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778798736225,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":474394,"timestamp":427250413138,"id":76,"parentId":39,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":487630,"timestamp":427250399948,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778798736225,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":478391,"timestamp":427250413148,"id":77,"parentId":40,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":491004,"timestamp":427250400586,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778798736225,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":478610,"timestamp":427250413116,"id":74,"parentId":37,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":491947,"timestamp":427250399802,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778798736224,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":482362,"timestamp":427250413157,"id":78,"parentId":41,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":494889,"timestamp":427250400692,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778798736225,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":485886,"timestamp":427250413166,"id":79,"parentId":42,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":498346,"timestamp":427250400765,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778798736225,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":486103,"timestamp":427250413174,"id":80,"parentId":43,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":498046,"timestamp":427250401260,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778798736226,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":489130,"timestamp":427250413183,"id":81,"parentId":44,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":500986,"timestamp":427250401373,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778798736226,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":489459,"timestamp":427250413192,"id":82,"parentId":45,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":501252,"timestamp":427250401436,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778798736226,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":491769,"timestamp":427250413200,"id":83,"parentId":46,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":503327,"timestamp":427250401710,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778798736226,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":493415,"timestamp":427250412208,"id":63,"parentId":25,"tags":{},"startTime":1778798736237,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":507473,"timestamp":427250398187,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778798736223,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":493358,"timestamp":427250413209,"id":84,"parentId":47,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":504808,"timestamp":427250401795,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778798736226,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":493401,"timestamp":427250417321,"id":87,"parentId":31,"tags":{},"startTime":1778798736242,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":511898,"timestamp":427250398870,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778798736224,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":494624,"timestamp":427250416263,"id":86,"parentId":24,"tags":{},"startTime":1778798736241,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":516242,"timestamp":427250394668,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778798736219,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":502837,"timestamp":427250413221,"id":85,"parentId":48,"tags":{},"startTime":1778798736238,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":514200,"timestamp":427250401918,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778798736227,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":493937,"timestamp":427250428379,"id":90,"parentId":50,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":519970,"timestamp":427250402400,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778798736227,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":499824,"timestamp":427250428393,"id":91,"parentId":51,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":525744,"timestamp":427250402535,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778798736227,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":506696,"timestamp":427250428405,"id":92,"parentId":52,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":532440,"timestamp":427250402723,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778798736227,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":511994,"timestamp":427250428419,"id":93,"parentId":53,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":537572,"timestamp":427250402898,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778798736228,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":524543,"timestamp":427250428433,"id":94,"parentId":55,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":549010,"timestamp":427250404053,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778798736229,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":536612,"timestamp":427250428442,"id":95,"parentId":56,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":560882,"timestamp":427250404254,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778798736229,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":545681,"timestamp":427250428460,"id":96,"parentId":58,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":566536,"timestamp":427250407681,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778798736232,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":555625,"timestamp":427250428473,"id":97,"parentId":59,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":576340,"timestamp":427250407829,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778798736233,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":559649,"timestamp":427250428313,"id":88,"parentId":23,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":593559,"timestamp":427250394488,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778798736219,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":567909,"timestamp":427250428362,"id":89,"parentId":49,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":594059,"timestamp":427250402274,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778798736227,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":567932,"timestamp":427250428484,"id":98,"parentId":60,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":588454,"timestamp":427250407982,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778798736233,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":571377,"timestamp":427250428505,"id":99,"parentId":57,"tags":{},"startTime":1778798736253,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":592765,"timestamp":427250407175,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778798736232,"traceId":"3a8a85d59c9f3a28"},{"name":"is-page-static","duration":562299,"timestamp":427250439956,"id":100,"parentId":54,"tags":{},"startTime":1778798736265,"traceId":"3a8a85d59c9f3a28"},{"name":"check-page","duration":599176,"timestamp":427250403126,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778798736228,"traceId":"3a8a85d59c9f3a28"},{"name":"static-check","duration":611088,"timestamp":427250391261,"id":19,"parentId":1,"tags":{},"startTime":1778798736216,"traceId":"3a8a85d59c9f3a28"},{"name":"write-routes-manifest","duration":400,"timestamp":427251012129,"id":102,"parentId":1,"tags":{},"startTime":1778798736837,"traceId":"3a8a85d59c9f3a28"},{"name":"load-dotenv","duration":57,"timestamp":427251024790,"id":105,"parentId":104,"tags":{},"startTime":1778798736849,"traceId":"3a8a85d59c9f3a28"},{"name":"run-export-path-map","duration":693,"timestamp":427251029408,"id":106,"parentId":104,"tags":{},"startTime":1778798736854,"traceId":"3a8a85d59c9f3a28"},{"name":"next-export","duration":698019,"timestamp":427251023557,"id":104,"parentId":1,"tags":{},"startTime":1778798736848,"traceId":"3a8a85d59c9f3a28"},{"name":"move-exported-app-not-found-","duration":697,"timestamp":427251725586,"id":107,"parentId":103,"tags":{},"startTime":1778798737550,"traceId":"3a8a85d59c9f3a28"},{"name":"move-exported-app-global-error-","duration":550,"timestamp":427251726389,"id":108,"parentId":103,"tags":{},"startTime":1778798737551,"traceId":"3a8a85d59c9f3a28"}]
2
+ [{"name":"static-generation","duration":713561,"timestamp":427251017820,"id":103,"parentId":1,"tags":{},"startTime":1778798736843,"traceId":"3a8a85d59c9f3a28"},{"name":"write-routes-manifest","duration":453,"timestamp":427251731668,"id":109,"parentId":1,"tags":{},"startTime":1778798737556,"traceId":"3a8a85d59c9f3a28"},{"name":"print-tree-view","duration":4624,"timestamp":427251739059,"id":110,"parentId":1,"tags":{},"startTime":1778798737564,"traceId":"3a8a85d59c9f3a28"},{"name":"write-route-bundle-stats","duration":20055,"timestamp":427251743736,"id":111,"parentId":1,"tags":{},"startTime":1778798737568,"traceId":"3a8a85d59c9f3a28"},{"name":"telemetry-flush","duration":56202,"timestamp":427251763853,"id":112,"parentId":1,"tags":{},"startTime":1778798737589,"traceId":"3a8a85d59c9f3a28"},{"name":"next-build","duration":19735402,"timestamp":427232084709,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778798717909,"traceId":"3a8a85d59c9f3a28"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":9469000,"timestamp":416861550985,"id":14,"parentId":1,"tags":{},"startTime":1778788347376,"traceId":"a47bdb9bd1bc6ec6"},{"name":"turbopack-build-events","duration":93,"timestamp":416861910104,"id":15,"parentId":1,"tags":{},"startTime":1778788347735,"traceId":"a47bdb9bd1bc6ec6"},{"name":"run-typescript","duration":8837699,"timestamp":416871033411,"id":16,"parentId":1,"tags":{},"startTime":1778788356858,"traceId":"a47bdb9bd1bc6ec6"},{"name":"static-check","duration":599692,"timestamp":416879946421,"id":19,"parentId":1,"tags":{},"startTime":1778788365771,"traceId":"a47bdb9bd1bc6ec6"},{"name":"static-generation","duration":617382,"timestamp":416880558022,"id":103,"parentId":1,"tags":{},"startTime":1778788366383,"traceId":"a47bdb9bd1bc6ec6"},{"name":"telemetry-flush","duration":146462,"timestamp":416881203781,"id":112,"parentId":1,"tags":{},"startTime":1778788367028,"traceId":"a47bdb9bd1bc6ec6"},{"name":"next-build","duration":20000035,"timestamp":416861350248,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778788347175,"traceId":"a47bdb9bd1bc6ec6"}]
1
+ [{"name":"run-turbopack","duration":9260945,"timestamp":427232286971,"id":14,"parentId":1,"tags":{},"startTime":1778798718112,"traceId":"3a8a85d59c9f3a28"},{"name":"turbopack-build-events","duration":77,"timestamp":427232628871,"id":15,"parentId":1,"tags":{},"startTime":1778798718454,"traceId":"3a8a85d59c9f3a28"},{"name":"run-typescript","duration":8762421,"timestamp":427241554793,"id":16,"parentId":1,"tags":{},"startTime":1778798727379,"traceId":"3a8a85d59c9f3a28"},{"name":"static-check","duration":611088,"timestamp":427250391261,"id":19,"parentId":1,"tags":{},"startTime":1778798736216,"traceId":"3a8a85d59c9f3a28"},{"name":"static-generation","duration":713561,"timestamp":427251017820,"id":103,"parentId":1,"tags":{},"startTime":1778798736843,"traceId":"3a8a85d59c9f3a28"},{"name":"telemetry-flush","duration":56202,"timestamp":427251763853,"id":112,"parentId":1,"tags":{},"startTime":1778798737589,"traceId":"3a8a85d59c9f3a28"},{"name":"next-build","duration":19735402,"timestamp":427232084709,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778798717909,"traceId":"3a8a85d59c9f3a28"}]
@@ -129,7 +129,7 @@ export function ChatPopover({ alias, onClose }: ChatPopoverProps) {
129
129
 
130
130
  return (
131
131
  <div
132
- className="fixed z-50 flex flex-col overflow-hidden rounded-xl border border-[#2a2a4a] bg-[#0a0a1a] shadow-2xl shadow-black/60 anet-fade-in"
132
+ className="fixed z-50 flex flex-col overflow-hidden rounded-xl border border-[var(--border)] bg-[var(--bg)] shadow-2xl shadow-black/60 anet-fade-in"
133
133
  style={{ left: pos.x, top: pos.y, width: size.w, height: size.h }}
134
134
  role="dialog"
135
135
  aria-label={`Chat with ${alias}`}
@@ -140,13 +140,13 @@ export function ChatPopover({ alias, onClose }: ChatPopoverProps) {
140
140
  onPointerMove={onPointerMove}
141
141
  onPointerUp={onPointerUp}
142
142
  onPointerCancel={onPointerUp}
143
- className="flex items-center justify-between px-3 py-2.5 border-b border-[#2a2a4a] bg-[#0d0d1a] rounded-t-xl cursor-grab active:cursor-grabbing select-none touch-none"
143
+ className="flex items-center justify-between px-3 py-2.5 border-b border-[var(--border)] bg-[var(--bg-secondary)] rounded-t-xl cursor-grab active:cursor-grabbing select-none touch-none"
144
144
  >
145
145
  <div className="flex items-center gap-2.5 min-w-0">
146
146
  <AliasAvatar alias={alias} size={28} />
147
147
  <div className="min-w-0">
148
- <div className="text-sm font-semibold text-white truncate">{alias}</div>
149
- <div className="text-[10px] text-gray-500">Drag to move · Esc to close</div>
148
+ <div className="text-sm font-semibold text-[var(--fg)] truncate">{alias}</div>
149
+ <div className="text-[10px] text-[var(--fg-muted)]">Drag to move · Esc to close</div>
150
150
  </div>
151
151
  </div>
152
152
  <button
@@ -155,7 +155,7 @@ export function ChatPopover({ alias, onClose }: ChatPopoverProps) {
155
155
  // Chromium retargets the click to the header — the button never fires.
156
156
  onPointerDown={(e) => e.stopPropagation()}
157
157
  aria-label="Close chat"
158
- className="text-gray-500 hover:text-white p-1.5 rounded-lg hover:bg-[#1a1a2a] shrink-0"
158
+ className="text-[var(--fg-muted)] hover:text-[var(--fg)] p-1.5 rounded-lg hover:bg-[var(--bg-elevated)] shrink-0"
159
159
  >
160
160
  <svg className="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
161
161
  <path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
@@ -178,7 +178,7 @@ export function ChatPopover({ alias, onClose }: ChatPopoverProps) {
178
178
  className="absolute bottom-0 right-0 w-5 h-5 cursor-nwse-resize touch-none z-10"
179
179
  style={{ touchAction: 'none' }}
180
180
  >
181
- <svg className="absolute bottom-0.5 right-0.5 w-3 h-3 text-gray-600" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" aria-hidden>
181
+ <svg className="absolute bottom-0.5 right-0.5 w-3 h-3 text-[var(--fg-dim)]" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" aria-hidden>
182
182
  <path d="M11 5L5 11M11 9L9 11" />
183
183
  </svg>
184
184
  </div>
@@ -29,19 +29,19 @@ function StatusBar({ status }: { status: string }) {
29
29
  {STATUS_STEPS.map((s, i) => (
30
30
  <div key={s} className="flex items-center gap-1">
31
31
  <div className={`w-2 h-2 rounded-full transition-all duration-700 ${
32
- isFailed ? (i === 0 ? 'bg-red-400' : 'bg-gray-700')
33
- : i <= idx ? (STATUS_COLORS[s] || 'bg-gray-600') : 'bg-gray-700'
32
+ isFailed ? (i === 0 ? 'bg-red-400' : 'bg-[var(--border)]')
33
+ : i <= idx ? (STATUS_COLORS[s] || 'bg-gray-600') : 'bg-[var(--border)]'
34
34
  }`} />
35
35
  {i < STATUS_STEPS.length - 1 && (
36
36
  <div className={`w-4 h-px transition-colors duration-700 ${
37
- isFailed ? 'bg-red-800' : i < idx ? 'bg-gray-500' : 'bg-gray-800'
37
+ isFailed ? 'bg-red-800' : i < idx ? 'bg-gray-500' : 'bg-[var(--border)]'
38
38
  }`} />
39
39
  )}
40
40
  </div>
41
41
  ))}
42
42
  <span className={`text-[10px] ml-1.5 font-medium ${
43
43
  isFailed ? 'text-red-400' : status === 'replied' ? 'text-purple-400'
44
- : status === 'running' ? 'text-green-400' : 'text-gray-500'
44
+ : status === 'running' ? 'text-green-400' : 'text-[var(--fg-muted)]'
45
45
  }`}>{status}</span>
46
46
  {(status === 'running' || status === 'delivered') && (
47
47
  <span className="ml-1">
@@ -62,34 +62,34 @@ import remarkGfm from 'remark-gfm';
62
62
  import { useSSE } from '../lib/useSSE';
63
63
 
64
64
  function MarkdownContent({ text }: { text: string }) {
65
- if (!text) return <span className="text-gray-600 italic">No content</span>;
65
+ if (!text) return <span className="text-[var(--fg-dim)] italic">No content</span>;
66
66
  return (
67
67
  <div className="break-words leading-relaxed">
68
68
  <ReactMarkdown
69
69
  remarkPlugins={[remarkGfm]}
70
70
  components={{
71
- h1: ({ children }) => <h1 className="text-base font-semibold text-white mt-2 mb-1">{children}</h1>,
72
- h2: ({ children }) => <h2 className="text-sm font-semibold text-white mt-2 mb-1">{children}</h2>,
71
+ h1: ({ children }) => <h1 className="text-base font-semibold text-[var(--fg)] mt-2 mb-1">{children}</h1>,
72
+ h2: ({ children }) => <h2 className="text-sm font-semibold text-[var(--fg)] mt-2 mb-1">{children}</h2>,
73
73
  h3: ({ children }) => <h3 className="text-sm font-semibold text-cyan-300 mt-1.5 mb-0.5">{children}</h3>,
74
74
  p: ({ children }) => <p className="my-1">{children}</p>,
75
- strong: ({ children }) => <strong className="text-white font-semibold">{children}</strong>,
76
- em: ({ children }) => <em className="italic text-gray-300">{children}</em>,
75
+ strong: ({ children }) => <strong className="text-[var(--fg)] font-semibold">{children}</strong>,
76
+ em: ({ children }) => <em className="italic text-[var(--fg-muted)]">{children}</em>,
77
77
  ul: ({ children }) => <ul className="list-disc pl-5 my-1 space-y-0.5">{children}</ul>,
78
78
  ol: ({ children }) => <ol className="list-decimal pl-5 my-1 space-y-0.5">{children}</ol>,
79
79
  li: ({ children }) => <li>{children}</li>,
80
80
  a: ({ href, children }) => <a href={href} target="_blank" rel="noreferrer" className="text-cyan-300 underline">{children}</a>,
81
- blockquote: ({ children }) => <blockquote className="border-l-2 border-cyan-500/30 pl-3 my-1 text-gray-400 italic">{children}</blockquote>,
82
- hr: () => <hr className="border-t border-[#1a1a2a] my-2" />,
81
+ blockquote: ({ children }) => <blockquote className="border-l-2 border-cyan-500/30 pl-3 my-1 text-[var(--fg-muted)] italic">{children}</blockquote>,
82
+ hr: () => <hr className="border-t border-[var(--border)] my-2" />,
83
83
  code: ({ className, children }) => {
84
84
  const inline = !className?.startsWith('language-');
85
85
  if (inline) {
86
- return <code className="bg-[#0a0a15] rounded px-1.5 py-0.5 text-cyan-300 text-[11px] border border-[#1a1a2a]">{children}</code>;
86
+ return <code className="bg-[var(--code-bg)] rounded px-1.5 py-0.5 text-cyan-300 text-[11px] border border-[var(--border)]">{children}</code>;
87
87
  }
88
88
  const lang = className?.replace(/^language-/, '') || '';
89
89
  return (
90
- <div className="my-2 rounded-lg overflow-hidden border border-[#1a1a2a]">
91
- {lang && <div className="bg-[#0a0a15] px-3 py-1 text-[10px] text-gray-500 border-b border-[#1a1a2a]">{lang}</div>}
92
- <pre className="bg-[#050510] px-3 py-2 text-[11px] text-green-300 overflow-x-auto"><code>{children}</code></pre>
90
+ <div className="my-2 rounded-lg overflow-hidden border border-[var(--border)]">
91
+ {lang && <div className="bg-[var(--code-bg)] px-3 py-1 text-[10px] text-[var(--fg-muted)] border-b border-[var(--border)]">{lang}</div>}
92
+ <pre className="bg-[var(--code-bg)] px-3 py-2 text-[11px] text-green-300 overflow-x-auto"><code>{children}</code></pre>
93
93
  </div>
94
94
  );
95
95
  },
@@ -98,11 +98,11 @@ function MarkdownContent({ text }: { text: string }) {
98
98
  <table className="w-full text-[12px] border-collapse">{children}</table>
99
99
  </div>
100
100
  ),
101
- thead: ({ children }) => <thead className="bg-[#0a0a15]">{children}</thead>,
101
+ thead: ({ children }) => <thead className="bg-[var(--code-bg)]">{children}</thead>,
102
102
  tbody: ({ children }) => <tbody>{children}</tbody>,
103
- tr: ({ children }) => <tr className="border-b border-[#1a1a2a]">{children}</tr>,
104
- th: ({ children }) => <th className="text-left text-cyan-300 font-semibold px-2 py-1 border border-[#1a1a2a]">{children}</th>,
105
- td: ({ children }) => <td className="px-2 py-1 border border-[#1a1a2a] align-top">{children}</td>,
103
+ tr: ({ children }) => <tr className="border-b border-[var(--border)]">{children}</tr>,
104
+ th: ({ children }) => <th className="text-left text-cyan-300 font-semibold px-2 py-1 border border-[var(--border)]">{children}</th>,
105
+ td: ({ children }) => <td className="px-2 py-1 border border-[var(--border)] align-top">{children}</td>,
106
106
  }}
107
107
  >
108
108
  {text}
@@ -348,8 +348,8 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
348
348
  {historyLoaded && messages.length === 0 && (
349
349
  <div className="text-center py-12">
350
350
  <div className="text-3xl mb-3">💬</div>
351
- <div className="text-gray-500 text-sm">Start a conversation</div>
352
- <div className="text-gray-600 text-xs mt-1">Send a task to {alias}</div>
351
+ <div className="text-[var(--fg-muted)] text-sm">Start a conversation</div>
352
+ <div className="text-[var(--fg-dim)] text-xs mt-1">Send a task to {alias}</div>
353
353
  </div>
354
354
  )}
355
355
 
@@ -368,16 +368,16 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
368
368
  <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">
369
369
  <div className="flex items-center gap-2 mb-1">
370
370
  <span className={`text-[10px] font-medium ${fromUser ? 'text-cyan-400' : 'text-purple-300'}`}>{senderLabel}</span>
371
- {!fromUser && <span className="text-[9px] text-gray-600">forwarded to {m.to_name}</span>}
371
+ {!fromUser && <span className="text-[9px] text-[var(--fg-dim)]">forwarded to {m.to_name}</span>}
372
372
  </div>
373
- <div className="text-[13px] text-gray-200">
373
+ <div className="text-[13px] text-[var(--fg)]">
374
374
  <MarkdownContent text={m.content} />
375
375
  </div>
376
376
  <div className="flex items-center justify-between mt-1.5 gap-3">
377
377
  <StatusBar status={m.status} />
378
378
  <div className="flex items-center gap-2 shrink-0">
379
379
  {senderBadge}
380
- <span className="text-[9px] text-gray-600">{timeAgo(m.created_at)}</span>
380
+ <span className="text-[9px] text-[var(--fg-dim)]">{timeAgo(m.created_at)}</span>
381
381
  </div>
382
382
  </div>
383
383
  </div>
@@ -389,9 +389,9 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
389
389
  <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">
390
390
  <div className="flex items-center gap-1.5 mb-1.5">
391
391
  {m.to_name && <AliasAvatar alias={m.to_name} size={14} />}
392
- <span className="text-[10px] text-gray-200 font-medium">{m.to_name}</span>
392
+ <span className="text-[10px] text-[var(--fg)] font-medium">{m.to_name}</span>
393
393
  </div>
394
- <div className="text-[13px] text-gray-200">
394
+ <div className="text-[13px] text-[var(--fg)]">
395
395
  <MarkdownContent text={m.result} />
396
396
  </div>
397
397
  </div>
@@ -401,7 +401,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
401
401
  {/* Typing indicator when running */}
402
402
  {m.status === 'running' && !m.result && (
403
403
  <div className="flex justify-start">
404
- <div className="bg-[#111128] border border-[#2a2a4a] rounded-2xl rounded-bl-md px-4 py-3">
404
+ <div className="bg-[var(--bg-secondary)] border border-[var(--border)] rounded-2xl rounded-bl-md px-4 py-3">
405
405
  <div className="flex gap-1">
406
406
  <span className="w-2 h-2 rounded-full bg-gray-500 animate-bounce" style={{ animationDelay: '0s' }} />
407
407
  <span className="w-2 h-2 rounded-full bg-gray-500 animate-bounce" style={{ animationDelay: '0.15s' }} />
@@ -417,17 +417,17 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
417
417
  </div>
418
418
 
419
419
  {/* Input area */}
420
- <div className="border-t border-[#2a2a4a] bg-[#0d0d1a] px-4 py-3">
420
+ <div className="border-t border-[var(--border)] bg-[var(--bg-secondary)] px-4 py-3">
421
421
  <div className="flex items-end gap-2">
422
422
  <div className="flex-1 relative">
423
423
  {/* @ mention dropdown */}
424
424
  {showMentions && filteredMentions.length > 0 && (
425
- <div className="absolute bottom-full left-0 right-0 mb-1 bg-[#111128] border border-[#2a2a4a] rounded-lg shadow-xl shadow-black/50 overflow-hidden z-10 max-h-48 overflow-y-auto">
425
+ <div className="absolute bottom-full left-0 right-0 mb-1 bg-[var(--bg-secondary)] border border-[var(--border)] rounded-lg shadow-xl shadow-black/50 overflow-hidden z-10 max-h-48 overflow-y-auto">
426
426
  {filteredMentions.map(node => (
427
427
  <button key={node} onClick={() => insertMention(node)}
428
428
  className="w-full flex items-center gap-2 px-3 py-2 text-xs text-left hover:bg-cyan-500/10 transition-colors">
429
429
  <AliasAvatar alias={node} size={16} />
430
- <span className="text-gray-300">{node}</span>
430
+ <span className="text-[var(--fg-muted)]">{node}</span>
431
431
  </button>
432
432
  ))}
433
433
  </div>
@@ -439,11 +439,11 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
439
439
  onKeyDown={handleKeyDown}
440
440
  placeholder={`Message ${alias}...`}
441
441
  rows={1}
442
- className="w-full bg-[#111128] border border-[#2a2a4a] rounded-xl px-4 py-2.5 pr-16 text-sm text-white placeholder-gray-600 focus:border-cyan-500/40 focus:outline-none resize-none transition-colors"
442
+ className="w-full bg-[var(--bg-secondary)] border border-[var(--border)] rounded-xl px-4 py-2.5 pr-16 text-sm text-[var(--fg)] placeholder-[var(--fg-dim)] focus:border-cyan-500/40 focus:outline-none resize-none transition-colors"
443
443
  />
444
444
  <div className="absolute right-2 bottom-1.5 flex items-center gap-1">
445
445
  <select value={priority} onChange={e => setPriority(e.target.value)}
446
- className="bg-transparent text-[9px] text-gray-600 focus:outline-none cursor-pointer">
446
+ className="bg-transparent text-[9px] text-[var(--fg-dim)] focus:outline-none cursor-pointer">
447
447
  <option value="normal">N</option>
448
448
  <option value="high">H</option>
449
449
  <option value="low">L</option>
@@ -451,7 +451,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
451
451
  </div>
452
452
  </div>
453
453
  <button onClick={send} disabled={sending || !input.trim()}
454
- className="p-2.5 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white rounded-xl transition-all shrink-0 active:scale-95">
454
+ className="p-2.5 bg-cyan-600 hover:bg-cyan-500 disabled:bg-[var(--border)] disabled:text-[var(--fg-dim)] text-[var(--fg)] rounded-xl transition-all shrink-0 active:scale-95">
455
455
  {sending ? (
456
456
  <div className="w-5 h-5 border-2 border-white/30 border-t-white rounded-full animate-spin" />
457
457
  ) : (
@@ -461,7 +461,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
461
461
  )}
462
462
  </button>
463
463
  </div>
464
- <div className="flex justify-between text-[9px] text-gray-700 mt-1.5">
464
+ <div className="flex justify-between text-[9px] text-[var(--fg-dim)] mt-1.5">
465
465
  <span>{input.includes('@') ? `Sending to: ${targetAlias}` : `Type @ to mention another node`}</span>
466
466
  <span>Enter to send · Shift+Enter for newline</span>
467
467
  </div>
@@ -476,17 +476,17 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
476
476
  return (
477
477
  <>
478
478
  <div className="fixed inset-0 bg-black/30 z-40 lg:hidden anet-fade-in" onClick={onClose} />
479
- <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">
479
+ <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">
480
480
  {/* Header */}
481
- <div className="flex items-center justify-between px-4 py-3 border-b border-[#2a2a4a] bg-[#0d0d1a]">
481
+ <div className="flex items-center justify-between px-4 py-3 border-b border-[var(--border)] bg-[var(--bg-secondary)]">
482
482
  <div className="flex items-center gap-3">
483
483
  <AliasAvatar alias={alias} size={32} />
484
484
  <div>
485
- <div className="text-sm font-semibold text-white">{alias}</div>
486
- <div className="text-[10px] text-gray-500">{pollingIds.size > 0 ? 'Processing...' : 'Ready'}</div>
485
+ <div className="text-sm font-semibold text-[var(--fg)]">{alias}</div>
486
+ <div className="text-[10px] text-[var(--fg-muted)]">{pollingIds.size > 0 ? 'Processing...' : 'Ready'}</div>
487
487
  </div>
488
488
  </div>
489
- <button onClick={onClose} className="text-gray-500 hover:text-white p-1.5 rounded-lg hover:bg-[#1a1a2a]">
489
+ <button onClick={onClose} className="text-[var(--fg-muted)] hover:text-[var(--fg)] p-1.5 rounded-lg hover:bg-[var(--bg-elevated)]">
490
490
  <svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
491
491
  <path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
492
492
  </svg>
@@ -16,6 +16,9 @@ interface MessageFlow {
16
16
  interface TopoGraphProps {
17
17
  sessions: Session[];
18
18
  sseSessions: Record<string, number>;
19
+ // #84: a node.renamed event from the Overview's SSE listener. When the
20
+ // currently open chat popover targets `from`, it follows the rename to `to`.
21
+ renameSignal?: { from: string; to: string; ts: number } | null;
19
22
  }
20
23
 
21
24
  interface Point {
@@ -284,7 +287,7 @@ function buildFlowLinks(messages: MessageFlow[], positions: Record<string, Point
284
287
  return [...links.values()].slice(0, 18);
285
288
  }
286
289
 
287
- export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
290
+ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProps) {
288
291
  const theme = useTheme();
289
292
  const isLight = theme === 'light';
290
293
  const pal = isLight ? LIGHT_PALETTE : DARK_PALETTE;
@@ -486,6 +489,16 @@ export function TopoGraph({ sessions, sseSessions }: TopoGraphProps) {
486
489
  // Issue #100: singleton chat popover. One alias at a time — clicking
487
490
  // another node swaps the target and the conversation switches in place.
488
491
  const [chatAlias, setChatAlias] = useState<string | null>(null);
492
+ // #84: when a node is renamed while its chat popover is open, follow the
493
+ // rename so the conversation keeps targeting a live alias.
494
+ useEffect(() => {
495
+ if (renameSignal && renameSignal.from === chatAlias) {
496
+ setChatAlias(renameSignal.to);
497
+ }
498
+ // chatAlias intentionally omitted — only react to a new rename signal,
499
+ // not to the user opening/closing the popover.
500
+ // eslint-disable-next-line react-hooks/exhaustive-deps
501
+ }, [renameSignal]);
489
502
 
490
503
  useEffect(() => { viewRef.current = view; }, [view]);
491
504
 
package/app/page.tsx CHANGED
@@ -42,6 +42,10 @@ export default function Dashboard() {
42
42
  const [showDispatch, setShowDispatch] = useState(false);
43
43
  const [inbox, setInbox] = useState<InboxMessage[]>([]);
44
44
  const [agentFilter, setAgentFilter] = useState<'all' | 'working' | 'idle' | 'offline'>('all');
45
+ // #84: last node.renamed event — passed to TopoGraph so an open chat
46
+ // popover follows the rename instead of pointing at a dead alias. `ts`
47
+ // makes the effect re-fire even when the same from/to repeats.
48
+ const [renameSignal, setRenameSignal] = useState<{ from: string; to: string; ts: number } | null>(null);
45
49
  const { mutate } = useSWRConfig();
46
50
 
47
51
  // SSE: instant revalidation on CommHub events
@@ -51,6 +55,19 @@ export default function Dashboard() {
51
55
  url: '/api/hub/events',
52
56
  enabled: sseEnabled,
53
57
  onEvent: (event) => {
58
+ // #84 (RFC-010 §3.4): node.renamed — revalidate the session list so the
59
+ // new alias propagates instantly (TopoGraph + node grid re-render, the
60
+ // avatar hue recomputes as a pure fn of alias) instead of waiting for
61
+ // the next 5s poll. The renamed node's history keeps the old alias
62
+ // server-side, so the task list needs no revalidation here.
63
+ if (event.type === 'node.renamed') {
64
+ mutate('/api/hub/status');
65
+ const d = event.data as { old_alias?: string; new_alias?: string } | undefined;
66
+ if (d?.old_alias && d?.new_alias) {
67
+ setRenameSignal({ from: d.old_alias, to: d.new_alias, ts: Date.now() });
68
+ }
69
+ return;
70
+ }
54
71
  if (['new_task', 'new_message', 'new_reply', 'node_status_changed', 'broadcast'].includes(event.type)) {
55
72
  mutate('/api/hub/status');
56
73
  mutate((key: string) => typeof key === 'string' && key.startsWith('/api/hub/tasks'), undefined, { revalidate: true });
@@ -368,7 +385,7 @@ export default function Dashboard() {
368
385
  </div>
369
386
  )}
370
387
 
371
- {showTopo && sessions.length > 0 && <TopoGraph sessions={sessions} sseSessions={sseSessions} />}
388
+ {showTopo && sessions.length > 0 && <TopoGraph sessions={sessions} sseSessions={sseSessions} renameSignal={renameSignal} />}
372
389
 
373
390
  {sessions.length === 0 && !sessError ? (
374
391
  <EmptyState
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.4.6-preview.4",
3
+ "version": "0.4.6-preview.6",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",