@sleep2agi/agent-network-dashboard 0.5.3-preview.51 → 0.5.3-preview.53

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 (155) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +5 -5
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
  134. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  138. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  139. package/.next/server/middleware-build-manifest.js +3 -3
  140. package/.next/server/pages/404.html +2 -2
  141. package/.next/server/pages/500.html +1 -1
  142. package/.next/static/chunks/{142gisyxu_fy5.js → 06uoa.s38_.uu.js} +1 -1
  143. package/.next/static/chunks/{0sht0y-y7x71m.css → 0b1q0~gt32zw-.css} +1 -1
  144. package/.next/static/chunks/{08i3yp3wnkvdd.js → 0j2p-urwyphyi.js} +2 -2
  145. package/.next/static/chunks/{12rya_znu46dn.js → 16~kjwife1p0h.js} +1 -1
  146. package/.next/static/chunks/{0ib0ojh9.ofrs.js → 17rrzduv~5uo1.js} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +51 -5
  150. package/package.json +1 -1
  151. package/scripts/topo-chip-row-digit-ls-test.mjs +135 -0
  152. package/scripts/topo-group-label-hover-glow-test.mjs +86 -0
  153. /package/.next/static/{-N6yPJbjnHbgai9z-vmKs → dx5C_FtRe3vhHh_n3EuRr}/_buildManifest.js +0 -0
  154. /package/.next/static/{-N6yPJbjnHbgai9z-vmKs → dx5C_FtRe3vhHh_n3EuRr}/_clientMiddlewareManifest.js +0 -0
  155. /package/.next/static/{-N6yPJbjnHbgai9z-vmKs → dx5C_FtRe3vhHh_n3EuRr}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.51"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);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,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.53"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);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 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.51"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.53"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":287,"timestamp":214119215813,"id":4,"parentId":1,"tags":{},"startTime":1779022091462,"traceId":"f7817edcb4f20e03"},{"name":"load-custom-routes","duration":443,"timestamp":214119216243,"id":5,"parentId":1,"tags":{},"startTime":1779022091463,"traceId":"f7817edcb4f20e03"},{"name":"create-dist-dir","duration":670,"timestamp":214119216724,"id":6,"parentId":1,"tags":{},"startTime":1779022091463,"traceId":"f7817edcb4f20e03"},{"name":"clean","duration":32429,"timestamp":214119217996,"id":7,"parentId":1,"tags":{},"startTime":1779022091464,"traceId":"f7817edcb4f20e03"},{"name":"discover-routes","duration":21654,"timestamp":214119332941,"id":8,"parentId":1,"tags":{},"startTime":1779022091579,"traceId":"f7817edcb4f20e03"},{"name":"create-root-mapping","duration":112,"timestamp":214119354657,"id":9,"parentId":1,"tags":{},"startTime":1779022091601,"traceId":"f7817edcb4f20e03"},{"name":"generate-route-types","duration":18473,"timestamp":214119357327,"id":10,"parentId":1,"tags":{},"startTime":1779022091604,"traceId":"f7817edcb4f20e03"},{"name":"public-dir-conflict-check","duration":95,"timestamp":214119375894,"id":11,"parentId":1,"tags":{},"startTime":1779022091622,"traceId":"f7817edcb4f20e03"},{"name":"generate-routes-manifest","duration":5670,"timestamp":214119376128,"id":12,"parentId":1,"tags":{},"startTime":1779022091622,"traceId":"f7817edcb4f20e03"},{"name":"run-turbopack","duration":6105589,"timestamp":214119387756,"id":14,"parentId":1,"tags":{},"startTime":1779022091634,"traceId":"f7817edcb4f20e03"},{"name":"turbopack-build-events","duration":126,"timestamp":214119673816,"id":15,"parentId":1,"tags":{},"startTime":1779022091920,"traceId":"f7817edcb4f20e03"},{"name":"run-typescript","duration":9777330,"timestamp":214125506092,"id":16,"parentId":1,"tags":{},"startTime":1779022097752,"traceId":"f7817edcb4f20e03"},{"name":"generate-required-server-files","duration":2579,"timestamp":214135284480,"id":18,"parentId":1,"tags":{},"startTime":1779022107531,"traceId":"f7817edcb4f20e03"},{"name":"check-static-error-page","duration":14614,"timestamp":214135456768,"id":20,"parentId":19,"tags":{},"startTime":1779022107703,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":447392,"timestamp":214135475185,"id":65,"parentId":22,"tags":{},"startTime":1779022107721,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":463618,"timestamp":214135459132,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779022107705,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":581512,"timestamp":214135476133,"id":71,"parentId":30,"tags":{},"startTime":1779022107722,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":595636,"timestamp":214135462109,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779022107708,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":600318,"timestamp":214135475461,"id":67,"parentId":26,"tags":{},"startTime":1779022107722,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":614360,"timestamp":214135461530,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779022107708,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":602743,"timestamp":214135475583,"id":68,"parentId":27,"tags":{},"startTime":1779022107722,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":616755,"timestamp":214135461641,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779022107708,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":605323,"timestamp":214135476193,"id":72,"parentId":32,"tags":{},"startTime":1779022107722,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":619067,"timestamp":214135462512,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779022107709,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":607397,"timestamp":214135476360,"id":73,"parentId":33,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":621161,"timestamp":214135462652,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779022107709,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":624415,"timestamp":214135475971,"id":70,"parentId":29,"tags":{},"startTime":1779022107722,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":638554,"timestamp":214135461908,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779022107708,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":635871,"timestamp":214135475354,"id":66,"parentId":25,"tags":{},"startTime":1779022107722,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":649884,"timestamp":214135461403,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779022107708,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":653972,"timestamp":214135476439,"id":74,"parentId":34,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":667715,"timestamp":214135462773,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779022107709,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":654998,"timestamp":214135475685,"id":69,"parentId":28,"tags":{},"startTime":1779022107722,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":668946,"timestamp":214135461767,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779022107708,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":654370,"timestamp":214135476464,"id":75,"parentId":35,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":667955,"timestamp":214135462905,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779022107709,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":664298,"timestamp":214135476485,"id":76,"parentId":36,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":677471,"timestamp":214135463381,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779022107710,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":673739,"timestamp":214135476533,"id":78,"parentId":38,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":686650,"timestamp":214135463679,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779022107710,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":674084,"timestamp":214135476570,"id":81,"parentId":42,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":686427,"timestamp":214135464282,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779022107711,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":674295,"timestamp":214135476558,"id":80,"parentId":40,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":686977,"timestamp":214135463908,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779022107710,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":674485,"timestamp":214135476513,"id":77,"parentId":37,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":687497,"timestamp":214135463547,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779022107710,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":677366,"timestamp":214135476584,"id":82,"parentId":44,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":688727,"timestamp":214135465409,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779022107712,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":682376,"timestamp":214135476593,"id":83,"parentId":45,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":693514,"timestamp":214135465578,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779022107712,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":686338,"timestamp":214135476607,"id":84,"parentId":46,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":697310,"timestamp":214135465685,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779022107712,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":686537,"timestamp":214135476644,"id":87,"parentId":49,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":695549,"timestamp":214135467668,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779022107714,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":688453,"timestamp":214135476543,"id":79,"parentId":39,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":701268,"timestamp":214135463795,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779022107710,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":689318,"timestamp":214135476630,"id":86,"parentId":48,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":700104,"timestamp":214135465928,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779022107712,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":691721,"timestamp":214135480197,"id":90,"parentId":24,"tags":{},"startTime":1779022107726,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":712426,"timestamp":214135459538,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779022107706,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":695644,"timestamp":214135481451,"id":91,"parentId":31,"tags":{},"startTime":1779022107728,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":714891,"timestamp":214135462253,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779022107709,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":693370,"timestamp":214135483943,"id":93,"parentId":43,"tags":{},"startTime":1779022107730,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":712920,"timestamp":214135464430,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779022107711,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":702121,"timestamp":214135476658,"id":88,"parentId":50,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":710968,"timestamp":214135467848,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779022107714,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":703128,"timestamp":214135476621,"id":85,"parentId":47,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":713995,"timestamp":214135465801,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779022107712,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":698617,"timestamp":214135482700,"id":92,"parentId":41,"tags":{},"startTime":1779022107729,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":717332,"timestamp":214135464027,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779022107710,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":704851,"timestamp":214135476671,"id":89,"parentId":51,"tags":{},"startTime":1779022107723,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":713597,"timestamp":214135467964,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779022107714,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":721356,"timestamp":214135473838,"id":64,"parentId":21,"tags":{},"startTime":1779022107720,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":737321,"timestamp":214135457929,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779022107704,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":721784,"timestamp":214135486420,"id":100,"parentId":58,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":738281,"timestamp":214135469985,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779022107716,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":752539,"timestamp":214135486346,"id":95,"parentId":52,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":770543,"timestamp":214135468411,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779022107715,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":753112,"timestamp":214135486393,"id":98,"parentId":55,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":770662,"timestamp":214135468950,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779022107715,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":754571,"timestamp":214135486322,"id":94,"parentId":23,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":781594,"timestamp":214135459342,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779022107706,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":758101,"timestamp":214135486406,"id":99,"parentId":56,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":775381,"timestamp":214135469181,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779022107715,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":762003,"timestamp":214135486553,"id":102,"parentId":61,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":777794,"timestamp":214135470806,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779022107717,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":762131,"timestamp":214135486579,"id":104,"parentId":63,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":777602,"timestamp":214135471142,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779022107717,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":762275,"timestamp":214135486537,"id":101,"parentId":59,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":778641,"timestamp":214135470211,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779022107716,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":763691,"timestamp":214135486566,"id":103,"parentId":62,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":779358,"timestamp":214135470976,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779022107717,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":764379,"timestamp":214135486384,"id":97,"parentId":54,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":782066,"timestamp":214135468738,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779022107715,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":765575,"timestamp":214135486369,"id":96,"parentId":53,"tags":{},"startTime":1779022107733,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":783405,"timestamp":214135468578,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779022107715,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":750605,"timestamp":214135501516,"id":105,"parentId":60,"tags":{},"startTime":1779022107748,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":781763,"timestamp":214135470385,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779022107717,"traceId":"f7817edcb4f20e03"},{"name":"is-page-static","duration":738884,"timestamp":214135514395,"id":106,"parentId":57,"tags":{},"startTime":1779022107761,"traceId":"f7817edcb4f20e03"},{"name":"check-page","duration":783886,"timestamp":214135469419,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779022107716,"traceId":"f7817edcb4f20e03"},{"name":"static-check","duration":797409,"timestamp":214135455928,"id":19,"parentId":1,"tags":{},"startTime":1779022107702,"traceId":"f7817edcb4f20e03"}]
2
- [{"name":"write-routes-manifest","duration":542,"timestamp":214136261851,"id":108,"parentId":1,"tags":{},"startTime":1779022108508,"traceId":"f7817edcb4f20e03"},{"name":"load-dotenv","duration":48,"timestamp":214136274267,"id":111,"parentId":110,"tags":{},"startTime":1779022108521,"traceId":"f7817edcb4f20e03"},{"name":"run-export-path-map","duration":563,"timestamp":214136276775,"id":112,"parentId":110,"tags":{},"startTime":1779022108523,"traceId":"f7817edcb4f20e03"},{"name":"next-export","duration":589213,"timestamp":214136273032,"id":110,"parentId":1,"tags":{},"startTime":1779022108519,"traceId":"f7817edcb4f20e03"},{"name":"move-exported-app-not-found-","duration":547,"timestamp":214136865600,"id":113,"parentId":109,"tags":{},"startTime":1779022109112,"traceId":"f7817edcb4f20e03"},{"name":"move-exported-app-global-error-","duration":392,"timestamp":214136866242,"id":114,"parentId":109,"tags":{},"startTime":1779022109113,"traceId":"f7817edcb4f20e03"},{"name":"static-generation","duration":602188,"timestamp":214136267029,"id":109,"parentId":1,"tags":{},"startTime":1779022108513,"traceId":"f7817edcb4f20e03"},{"name":"write-routes-manifest","duration":537,"timestamp":214136869485,"id":115,"parentId":1,"tags":{},"startTime":1779022109116,"traceId":"f7817edcb4f20e03"},{"name":"print-tree-view","duration":4595,"timestamp":214136891521,"id":116,"parentId":1,"tags":{},"startTime":1779022109138,"traceId":"f7817edcb4f20e03"},{"name":"write-route-bundle-stats","duration":12428,"timestamp":214136896150,"id":117,"parentId":1,"tags":{},"startTime":1779022109142,"traceId":"f7817edcb4f20e03"},{"name":"telemetry-flush","duration":16880,"timestamp":214136908605,"id":118,"parentId":1,"tags":{},"startTime":1779022109155,"traceId":"f7817edcb4f20e03"},{"name":"next-build","duration":17760818,"timestamp":214119164698,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779022091411,"traceId":"f7817edcb4f20e03"}]
1
+ [{"name":"generate-buildid","duration":254,"timestamp":214872374247,"id":4,"parentId":1,"tags":{},"startTime":1779022844621,"traceId":"afc75d156bf2b3c0"},{"name":"load-custom-routes","duration":478,"timestamp":214872374641,"id":5,"parentId":1,"tags":{},"startTime":1779022844621,"traceId":"afc75d156bf2b3c0"},{"name":"create-dist-dir","duration":755,"timestamp":214872375159,"id":6,"parentId":1,"tags":{},"startTime":1779022844621,"traceId":"afc75d156bf2b3c0"},{"name":"clean","duration":34961,"timestamp":214872376640,"id":7,"parentId":1,"tags":{},"startTime":1779022844623,"traceId":"afc75d156bf2b3c0"},{"name":"discover-routes","duration":29141,"timestamp":214872497573,"id":8,"parentId":1,"tags":{},"startTime":1779022844744,"traceId":"afc75d156bf2b3c0"},{"name":"create-root-mapping","duration":157,"timestamp":214872526792,"id":9,"parentId":1,"tags":{},"startTime":1779022844773,"traceId":"afc75d156bf2b3c0"},{"name":"generate-route-types","duration":25790,"timestamp":214872530738,"id":10,"parentId":1,"tags":{},"startTime":1779022844777,"traceId":"afc75d156bf2b3c0"},{"name":"public-dir-conflict-check","duration":124,"timestamp":214872556634,"id":11,"parentId":1,"tags":{},"startTime":1779022844803,"traceId":"afc75d156bf2b3c0"},{"name":"generate-routes-manifest","duration":5378,"timestamp":214872556942,"id":12,"parentId":1,"tags":{},"startTime":1779022844803,"traceId":"afc75d156bf2b3c0"},{"name":"run-turbopack","duration":6482159,"timestamp":214872567890,"id":14,"parentId":1,"tags":{},"startTime":1779022844814,"traceId":"afc75d156bf2b3c0"},{"name":"turbopack-build-events","duration":100,"timestamp":214872872540,"id":15,"parentId":1,"tags":{},"startTime":1779022845119,"traceId":"afc75d156bf2b3c0"},{"name":"run-typescript","duration":10245082,"timestamp":214879058268,"id":16,"parentId":1,"tags":{},"startTime":1779022851305,"traceId":"afc75d156bf2b3c0"},{"name":"generate-required-server-files","duration":3161,"timestamp":214889304405,"id":18,"parentId":1,"tags":{},"startTime":1779022861551,"traceId":"afc75d156bf2b3c0"},{"name":"check-static-error-page","duration":15492,"timestamp":214889538404,"id":20,"parentId":19,"tags":{},"startTime":1779022861785,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":453185,"timestamp":214889557877,"id":65,"parentId":22,"tags":{},"startTime":1779022861804,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":470021,"timestamp":214889541733,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779022861788,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":568289,"timestamp":214889558257,"id":68,"parentId":27,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":581459,"timestamp":214889545182,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779022861791,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":573266,"timestamp":214889558806,"id":72,"parentId":32,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":586197,"timestamp":214889545958,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779022861792,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":583600,"timestamp":214889558743,"id":71,"parentId":30,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":596853,"timestamp":214889545567,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779022861792,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":589412,"timestamp":214889558992,"id":73,"parentId":33,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":602378,"timestamp":214889546120,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779022861792,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":595513,"timestamp":214889559114,"id":75,"parentId":35,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":608349,"timestamp":214889546354,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779022861793,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":603305,"timestamp":214889558030,"id":66,"parentId":25,"tags":{},"startTime":1779022861804,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":616560,"timestamp":214889544857,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779022861791,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":602456,"timestamp":214889559134,"id":76,"parentId":36,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":614813,"timestamp":214889546815,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779022861793,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":610090,"timestamp":214889559176,"id":78,"parentId":38,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":622158,"timestamp":214889547175,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779022861793,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":613476,"timestamp":214889558620,"id":70,"parentId":29,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":626767,"timestamp":214889545428,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779022861792,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":617377,"timestamp":214889559085,"id":74,"parentId":34,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":630279,"timestamp":214889546234,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779022861793,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":619032,"timestamp":214889559203,"id":80,"parentId":40,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":630893,"timestamp":214889547385,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779022861794,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":636942,"timestamp":214889559189,"id":79,"parentId":39,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":648934,"timestamp":214889547279,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779022861794,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":641483,"timestamp":214889559239,"id":83,"parentId":45,"tags":{},"startTime":1779022861806,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":652430,"timestamp":214889548355,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779022861795,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":644592,"timestamp":214889559213,"id":81,"parentId":42,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":656149,"timestamp":214889547746,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779022861794,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":649837,"timestamp":214889559248,"id":84,"parentId":46,"tags":{},"startTime":1779022861806,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":660691,"timestamp":214889548462,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779022861795,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":650139,"timestamp":214889559226,"id":82,"parentId":44,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":661207,"timestamp":214889548214,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779022861794,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":650345,"timestamp":214889559263,"id":85,"parentId":47,"tags":{},"startTime":1779022861806,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":661062,"timestamp":214889548588,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779022861795,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":651476,"timestamp":214889558358,"id":69,"parentId":28,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":664568,"timestamp":214889545314,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779022861792,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":652016,"timestamp":214889559277,"id":86,"parentId":48,"tags":{},"startTime":1779022861806,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":661180,"timestamp":214889550155,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779022861796,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":650041,"timestamp":214889566680,"id":90,"parentId":24,"tags":{},"startTime":1779022861813,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":674475,"timestamp":214889542289,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779022861789,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":658656,"timestamp":214889559159,"id":77,"parentId":37,"tags":{},"startTime":1779022861805,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":670828,"timestamp":214889547030,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779022861793,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":660047,"timestamp":214889559300,"id":88,"parentId":50,"tags":{},"startTime":1779022861806,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":668968,"timestamp":214889550425,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779022861797,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":655856,"timestamp":214889567902,"id":91,"parentId":31,"tags":{},"startTime":1779022861814,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":678119,"timestamp":214889545685,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779022861792,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":648691,"timestamp":214889577216,"id":93,"parentId":43,"tags":{},"startTime":1779022861823,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":678047,"timestamp":214889547901,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779022861794,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":672514,"timestamp":214889559291,"id":87,"parentId":49,"tags":{},"startTime":1779022861806,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":681525,"timestamp":214889550328,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779022861797,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":682291,"timestamp":214889558146,"id":67,"parentId":26,"tags":{},"startTime":1779022861804,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":695441,"timestamp":214889545060,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779022861791,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":684022,"timestamp":214889568761,"id":92,"parentId":41,"tags":{},"startTime":1779022861815,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":705362,"timestamp":214889547485,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779022861794,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":695969,"timestamp":214889557459,"id":64,"parentId":21,"tags":{},"startTime":1779022861804,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":713403,"timestamp":214889540076,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779022861786,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":697521,"timestamp":214889559313,"id":89,"parentId":51,"tags":{},"startTime":1779022861806,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":706387,"timestamp":214889550511,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779022861797,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":670541,"timestamp":214889591723,"id":99,"parentId":56,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":710650,"timestamp":214889551665,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779022861798,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":691937,"timestamp":214889591621,"id":94,"parentId":23,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":741587,"timestamp":214889542044,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779022861788,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":694740,"timestamp":214889591667,"id":95,"parentId":52,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":735566,"timestamp":214889550926,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779022861797,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":701372,"timestamp":214889591902,"id":102,"parentId":61,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":739980,"timestamp":214889553359,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779022861800,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":707118,"timestamp":214889591914,"id":103,"parentId":62,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":745584,"timestamp":214889553510,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779022861800,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":717204,"timestamp":214889591935,"id":105,"parentId":60,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":756306,"timestamp":214889552901,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779022861799,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":719454,"timestamp":214889591683,"id":96,"parentId":53,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":760099,"timestamp":214889551100,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779022861797,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":720558,"timestamp":214889591926,"id":104,"parentId":63,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":758892,"timestamp":214889553643,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779022861800,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":712231,"timestamp":214889605292,"id":106,"parentId":57,"tags":{},"startTime":1779022861852,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":765644,"timestamp":214889551927,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779022861798,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":729169,"timestamp":214889591884,"id":101,"parentId":59,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":768387,"timestamp":214889552712,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779022861799,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":736439,"timestamp":214889591736,"id":100,"parentId":58,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":775716,"timestamp":214889552499,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779022861799,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":738653,"timestamp":214889591710,"id":98,"parentId":55,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":778926,"timestamp":214889551462,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779022861798,"traceId":"afc75d156bf2b3c0"},{"name":"is-page-static","duration":743094,"timestamp":214889591700,"id":97,"parentId":54,"tags":{},"startTime":1779022861838,"traceId":"afc75d156bf2b3c0"},{"name":"check-page","duration":783576,"timestamp":214889551268,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779022861798,"traceId":"afc75d156bf2b3c0"},{"name":"static-check","duration":797888,"timestamp":214889537037,"id":19,"parentId":1,"tags":{},"startTime":1779022861783,"traceId":"afc75d156bf2b3c0"}]
2
+ [{"name":"write-routes-manifest","duration":566,"timestamp":214890346151,"id":108,"parentId":1,"tags":{},"startTime":1779022862592,"traceId":"afc75d156bf2b3c0"},{"name":"load-dotenv","duration":45,"timestamp":214890359379,"id":111,"parentId":110,"tags":{},"startTime":1779022862606,"traceId":"afc75d156bf2b3c0"},{"name":"run-export-path-map","duration":716,"timestamp":214890361996,"id":112,"parentId":110,"tags":{},"startTime":1779022862608,"traceId":"afc75d156bf2b3c0"},{"name":"next-export","duration":599275,"timestamp":214890358113,"id":110,"parentId":1,"tags":{},"startTime":1779022862604,"traceId":"afc75d156bf2b3c0"},{"name":"move-exported-app-not-found-","duration":592,"timestamp":214890960699,"id":113,"parentId":109,"tags":{},"startTime":1779022863207,"traceId":"afc75d156bf2b3c0"},{"name":"move-exported-app-global-error-","duration":415,"timestamp":214890961381,"id":114,"parentId":109,"tags":{},"startTime":1779022863208,"traceId":"afc75d156bf2b3c0"},{"name":"static-generation","duration":613024,"timestamp":214890351061,"id":109,"parentId":1,"tags":{},"startTime":1779022862597,"traceId":"afc75d156bf2b3c0"},{"name":"write-routes-manifest","duration":393,"timestamp":214890964317,"id":115,"parentId":1,"tags":{},"startTime":1779022863211,"traceId":"afc75d156bf2b3c0"},{"name":"print-tree-view","duration":5003,"timestamp":214890975550,"id":116,"parentId":1,"tags":{},"startTime":1779022863222,"traceId":"afc75d156bf2b3c0"},{"name":"write-route-bundle-stats","duration":15452,"timestamp":214890980592,"id":117,"parentId":1,"tags":{},"startTime":1779022863227,"traceId":"afc75d156bf2b3c0"},{"name":"telemetry-flush","duration":23717,"timestamp":214890996080,"id":118,"parentId":1,"tags":{},"startTime":1779022863242,"traceId":"afc75d156bf2b3c0"},{"name":"next-build","duration":18695176,"timestamp":214872324671,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779022844571,"traceId":"afc75d156bf2b3c0"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6105589,"timestamp":214119387756,"id":14,"parentId":1,"tags":{},"startTime":1779022091634,"traceId":"f7817edcb4f20e03"},{"name":"turbopack-build-events","duration":126,"timestamp":214119673816,"id":15,"parentId":1,"tags":{},"startTime":1779022091920,"traceId":"f7817edcb4f20e03"},{"name":"run-typescript","duration":9777330,"timestamp":214125506092,"id":16,"parentId":1,"tags":{},"startTime":1779022097752,"traceId":"f7817edcb4f20e03"},{"name":"static-check","duration":797409,"timestamp":214135455928,"id":19,"parentId":1,"tags":{},"startTime":1779022107702,"traceId":"f7817edcb4f20e03"},{"name":"static-generation","duration":602188,"timestamp":214136267029,"id":109,"parentId":1,"tags":{},"startTime":1779022108513,"traceId":"f7817edcb4f20e03"},{"name":"telemetry-flush","duration":16880,"timestamp":214136908605,"id":118,"parentId":1,"tags":{},"startTime":1779022109155,"traceId":"f7817edcb4f20e03"},{"name":"next-build","duration":17760818,"timestamp":214119164698,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779022091411,"traceId":"f7817edcb4f20e03"}]
1
+ [{"name":"run-turbopack","duration":6482159,"timestamp":214872567890,"id":14,"parentId":1,"tags":{},"startTime":1779022844814,"traceId":"afc75d156bf2b3c0"},{"name":"turbopack-build-events","duration":100,"timestamp":214872872540,"id":15,"parentId":1,"tags":{},"startTime":1779022845119,"traceId":"afc75d156bf2b3c0"},{"name":"run-typescript","duration":10245082,"timestamp":214879058268,"id":16,"parentId":1,"tags":{},"startTime":1779022851305,"traceId":"afc75d156bf2b3c0"},{"name":"static-check","duration":797888,"timestamp":214889537037,"id":19,"parentId":1,"tags":{},"startTime":1779022861783,"traceId":"afc75d156bf2b3c0"},{"name":"static-generation","duration":613024,"timestamp":214890351061,"id":109,"parentId":1,"tags":{},"startTime":1779022862597,"traceId":"afc75d156bf2b3c0"},{"name":"telemetry-flush","duration":23717,"timestamp":214890996080,"id":118,"parentId":1,"tags":{},"startTime":1779022863242,"traceId":"afc75d156bf2b3c0"},{"name":"next-build","duration":18695176,"timestamp":214872324671,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779022844571,"traceId":"afc75d156bf2b3c0"}]
@@ -2263,7 +2263,26 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2263
2263
  at the chip-count scope. Sibling edits on the
2264
2264
  online + active-links chip digits below. data-
2265
2265
  working-chip-digit attr exposes the digit span. */}
2266
- <span className="font-semibold transition-[font-weight] duration-200 group-hover:font-bold" data-working-chip-digit>{workingCount}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-working-chip-unit> working</span>
2266
+ {/* Round 539 / Loop chip-row digit gains group-hover:
2267
+ tracking-wide alongside the existing R362 group-
2268
+ hover:font-bold. Pre-R539 the chip digit lifted
2269
+ only on the font-weight axis (600 → 700 on chip
2270
+ hover); R539 adds the kerning axis (tracking
2271
+ normal → tracking-wide ≈ 0.025em ≈ 0.3px on a 12px
2272
+ digit) so hover lifts BOTH typography axes
2273
+ together — same idiom R420/R517 establish at the
2274
+ chrome zoom-level (letter-spacing + fontWeight
2275
+ hover delta) and R531/R530 mirror at the panel
2276
+ label scope. transition-[font-weight] extends to
2277
+ transition-[font-weight,letter-spacing] for the
2278
+ smooth dual-axis tween.
2279
+ Sibling treatment across the 3 chip-row digits
2280
+ (working / online / active-links) — single concept
2281
+ replicated at 3 surfaces by replace_all.
2282
+ Hover-letter-spacing family extension (12 anchors
2283
+ now): R344/R345/R347/R420/R427/R431/R432/R433/
2284
+ R434/R517/R518 + R539 (this round). */}
2285
+ <span className="font-semibold transition-[font-weight,letter-spacing] duration-200 group-hover:font-bold group-hover:tracking-wide" data-working-chip-digit>{workingCount}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-working-chip-unit> working</span>
2267
2286
  </span>
2268
2287
  <span
2269
2288
  // Round 201 / Loop: online chip — mirror of the working
@@ -2334,7 +2353,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2334
2353
  >
2335
2354
  {/* R337 sibling — online chip unit demotion. */}
2336
2355
  {/* R362 sibling — online-chip digit gains font-semibold. */}
2337
- <span className="font-semibold transition-[font-weight] duration-200 group-hover:font-bold" data-online-chip-digit>{onlineNodes.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-online-chip-unit> online</span>
2356
+ {/* R539 sibling online chip digit. Same idiom as
2357
+ working chip above (group-hover:tracking-wide). */}
2358
+ <span className="font-semibold transition-[font-weight,letter-spacing] duration-200 group-hover:font-bold group-hover:tracking-wide" data-online-chip-digit>{onlineNodes.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-online-chip-unit> online</span>
2338
2359
  </span>
2339
2360
  </>
2340
2361
  );
@@ -3405,7 +3426,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
3405
3426
  chip-internal-hierarchy arc. data-active-links-
3406
3427
  chip-unit exposes the unit span for tests. */}
3407
3428
  {/* R362 sibling — active-links chip digit gains font-semibold. */}
3408
- <span className="font-semibold transition-[font-weight] duration-200 group-hover:font-bold" data-active-links-chip-digit>{flowLinks.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-active-links-chip-unit> active link{flowLinks.length === 1 ? '' : 's'}</span>
3429
+ {/* R539 sibling active-links chip digit. Same idiom
3430
+ as working + online above. */}
3431
+ <span className="font-semibold transition-[font-weight,letter-spacing] duration-200 group-hover:font-bold group-hover:tracking-wide" data-active-links-chip-digit>{flowLinks.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-active-links-chip-unit> active link{flowLinks.length === 1 ? '' : 's'}</span>
3409
3432
  {rel ? (() => {
3410
3433
  // Round 161 / Loop: extend R160's recency-pip
3411
3434
  // vocabulary up one scope — from per-flow row to
@@ -5234,7 +5257,28 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5234
5257
  transition list extends to include 'filter 200ms
5235
5258
  ease-out' alongside the existing fill/ls/fw/opacity
5236
5259
  200ms tweens. */
5237
- data-group-label-glow={isPinned ? 'true' : 'false'}
5260
+ /* Round 538 / Loop — extends R479 group-label drop-
5261
+ shadow from pin-only to ALSO fire on hover, with
5262
+ a 2-tier alpha ladder matching the R432 letter-
5263
+ spacing 3-tier (hover at 0.25px / pin at 0.5px)
5264
+ pattern. Pre-R538 the paint axis was binary (lit
5265
+ on pin, dark on hover); R538 adds a softer hover
5266
+ glow that distinguishes from the stronger pin
5267
+ glow without losing the "active state lights up"
5268
+ gesture.
5269
+ 2-tier alpha ladder:
5270
+ pin (committed) cyan 80 hex (~50% alpha)
5271
+ hover (preview) cyan 4d hex (~30% alpha)
5272
+ rest none
5273
+ Pin signature stays distinctively brighter, but
5274
+ hover now telegraphs paint-axis attention too.
5275
+ Sibling to R534 edge-badge hover-precedence
5276
+ extension at the drop-shadow family. R479 hue
5277
+ (pal.legendAccent) preserved across both tiers.
5278
+ data-group-label-glow attr upgraded from binary
5279
+ ('true'/'false') to 3-value ('pin' | 'hover' |
5280
+ 'false') so tests can distinguish gate cause. */
5281
+ data-group-label-glow={isPinned ? 'pin' : isHovered ? 'hover' : 'false'}
5238
5282
  /* Round 499 / Loop — orphan band "其他" label gets
5239
5283
  fontStyle: italic to visually distinguish the
5240
5284
  catchall from real prefix-group bands. Pre-R499
@@ -5263,7 +5307,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5263
5307
  fontStyle: box.isOrphan ? 'italic' : undefined,
5264
5308
  filter: isPinned
5265
5309
  ? `drop-shadow(0 0 3px ${pal.legendAccent}80)`
5266
- : undefined,
5310
+ : isHovered
5311
+ ? `drop-shadow(0 0 3px ${pal.legendAccent}4d)`
5312
+ : undefined,
5267
5313
  }}
5268
5314
  data-group-label={box.key}
5269
5315
  data-group-label-pinned={isPinned ? 'true' : 'false'}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.51",
3
+ "version": "0.5.3-preview.53",
4
4
  "description": "Agent Network Dashboard \u2014 Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,135 @@
1
+ /* Round 539 verification: chip-row digit (working/online/active-links)
2
+ * gains group-hover:tracking-wide alongside existing R362 group-hover:
3
+ * font-bold. Hover-letter-spacing family 12th anchor across 3 siblings.
4
+ *
5
+ * Test phases:
6
+ * 1. rest each chip-digit: computed letterSpacing='normal' (=0)
7
+ * 2. hover the chip's parent (has `group` class — sets group-hover):
8
+ * digit's letterSpacing = ~0.025em
9
+ * 3. source-side regex confirms all 3 digits have the new class
10
+ */
11
+ import { chromium } from 'playwright';
12
+ import { readFileSync } from 'node:fs';
13
+
14
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
15
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
16
+
17
+ const browser = await chromium.launch({ headless: true });
18
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
19
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
20
+ await ctx.addInitScript(() => {
21
+ try {
22
+ localStorage.setItem('anet-theme', 'cyber');
23
+ localStorage.setItem('anet-topo-layout', 'ring');
24
+ sessionStorage.setItem('anet_v3_auth', '1');
25
+ } catch {}
26
+ });
27
+ await ctx.route('**/api/hub/status*', async (route) => {
28
+ const r = await route.fetch();
29
+ const b = await r.json();
30
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
31
+ const mk = (alias, status) => ({
32
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
33
+ network_id: nid, project_dir: null,
34
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
35
+ });
36
+ await route.fulfill({ response: r, json: { ...b, sessions: [
37
+ mk('a·1', 'working'), mk('a·2', 'idle'),
38
+ ] } });
39
+ });
40
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: {
41
+ messages: [{ id: 'm1', from_alias: 'a·1', to_alias: 'a·2', content: 't', created_at: fresh }]
42
+ } }));
43
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
44
+ const page = await ctx.newPage();
45
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
46
+ await page.waitForSelector('[data-working-chip-digit]', { timeout: 15000 });
47
+ await page.waitForTimeout(800);
48
+
49
+ async function probe(digitSel, chipParentSel) {
50
+ const rest = await page.evaluate((s) => {
51
+ const el = document.querySelector(s);
52
+ if (!el) return null;
53
+ return { ls: getComputedStyle(el).letterSpacing };
54
+ }, digitSel);
55
+ await page.hover(chipParentSel);
56
+ await page.waitForTimeout(350);
57
+ const hover = await page.evaluate((s) => {
58
+ const el = document.querySelector(s);
59
+ if (!el) return null;
60
+ return { ls: getComputedStyle(el).letterSpacing };
61
+ }, digitSel);
62
+ // move pointer away for next probe
63
+ await page.mouse.move(50, 50);
64
+ await page.waitForTimeout(200);
65
+ return { rest, hover };
66
+ }
67
+
68
+ // The chip-row chip <span class="group ...">; each has parent with `group`.
69
+ // Hover the chip's parent span — its child digit gets group-hover effects.
70
+ // The chip parent is the closest ancestor with `group` class. Easier: find
71
+ // the digit and walk up to nearest `.group` element via JS.
72
+ async function hoverChipDigit(sel) {
73
+ const handle = await page.evaluateHandle((s) => {
74
+ const el = document.querySelector(s);
75
+ if (!el) return null;
76
+ let p = el.parentElement;
77
+ while (p && !p.classList.contains('group')) p = p.parentElement;
78
+ return p;
79
+ }, sel);
80
+ return handle;
81
+ }
82
+
83
+ async function probeChip(digitSel) {
84
+ const rest = await page.evaluate((s) => {
85
+ const el = document.querySelector(s);
86
+ if (!el) return null;
87
+ return { ls: getComputedStyle(el).letterSpacing };
88
+ }, digitSel);
89
+ const groupHandle = await hoverChipDigit(digitSel);
90
+ await groupHandle.asElement()?.hover();
91
+ await page.waitForTimeout(350);
92
+ const hover = await page.evaluate((s) => {
93
+ const el = document.querySelector(s);
94
+ if (!el) return null;
95
+ return { ls: getComputedStyle(el).letterSpacing };
96
+ }, digitSel);
97
+ await page.mouse.move(50, 50);
98
+ await page.waitForTimeout(200);
99
+ return { rest, hover };
100
+ }
101
+
102
+ const working = await probeChip('[data-working-chip-digit]');
103
+ const online = await probeChip('[data-online-chip-digit]');
104
+ const activeLinks = await probeChip('[data-active-links-chip-digit]');
105
+
106
+ await browser.close();
107
+
108
+ // Source regex — all 3 chip digits should carry the new class string
109
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
110
+ const sourceWorking = /class[Nn]ame="font-semibold transition-\[font-weight,letter-spacing\] duration-200 group-hover:font-bold group-hover:tracking-wide" data-working-chip-digit/.test(src);
111
+ const sourceOnline = /class[Nn]ame="font-semibold transition-\[font-weight,letter-spacing\] duration-200 group-hover:font-bold group-hover:tracking-wide" data-online-chip-digit/.test(src);
112
+ const sourceAL = /class[Nn]ame="font-semibold transition-\[font-weight,letter-spacing\] duration-200 group-hover:font-bold group-hover:tracking-wide" data-active-links-chip-digit/.test(src);
113
+
114
+ const isRestLS = (r) => r?.ls === 'normal' || r?.ls === '0px';
115
+ // tracking-wide = 0.025em; on text-xs (12px) digit ≈ 0.3px (varies with computed font-size)
116
+ const isHoverLS = (r) => r?.ls && r.ls !== 'normal' && r.ls !== '0px' && parseFloat(r.ls) > 0.1;
117
+
118
+ const results = {
119
+ working_rest_normal: isRestLS(working?.rest),
120
+ working_hover_wide: isHoverLS(working?.hover),
121
+ online_rest_normal: isRestLS(online?.rest),
122
+ online_hover_wide: isHoverLS(online?.hover),
123
+ active_rest_normal: isRestLS(activeLinks?.rest),
124
+ active_hover_wide: isHoverLS(activeLinks?.hover),
125
+ source_working: sourceWorking,
126
+ source_online: sourceOnline,
127
+ source_active_links: sourceAL,
128
+ };
129
+ const ok = Object.values(results).every(Boolean);
130
+ console.log(`${ok ? '✅' : '❌'} R539 chip-row digit hover-tracking:`,
131
+ JSON.stringify(results, null, 2),
132
+ '\n working:', JSON.stringify(working),
133
+ '\n online:', JSON.stringify(online),
134
+ '\n active-links:', JSON.stringify(activeLinks));
135
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,86 @@
1
+ /* Round 538 verification: group label drop-shadow extends from pin-only
2
+ * (R479) to ALSO fire on hover, with 2-tier alpha ladder (pin: 80 hex /
3
+ * hover: 4d hex).
4
+ *
5
+ * Test strategy: source-canonical (group labels only render in grid
6
+ * layout AND group hover via Playwright is impractical for the same
7
+ * SVG-deep reasons as edge-hover R534). Rest probe + source regex
8
+ * covers the wiring.
9
+ *
10
+ * Test phases:
11
+ * 1. rest grid (group label visible): glow attr='false', filter='none'
12
+ * 2. source-side regex confirms:
13
+ * - filter ternary: pin > hover > undefined with 80/4d alpha
14
+ * - 3-value attr ('pin' | 'hover' | 'false')
15
+ */
16
+ import { chromium } from 'playwright';
17
+ import { readFileSync } from 'node:fs';
18
+
19
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
20
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
21
+
22
+ const browser = await chromium.launch({ headless: true });
23
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
24
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
25
+ await ctx.addInitScript(() => {
26
+ try {
27
+ localStorage.setItem('anet-theme', 'cyber');
28
+ localStorage.setItem('anet-topo-layout', 'grid'); // grid for group labels
29
+ sessionStorage.setItem('anet_v3_auth', '1');
30
+ } catch {}
31
+ });
32
+ await ctx.route('**/api/hub/status*', async (route) => {
33
+ const r = await route.fetch();
34
+ const b = await r.json();
35
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
36
+ const mk = (alias, status) => ({
37
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
38
+ network_id: nid, project_dir: null,
39
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
40
+ });
41
+ // Two prefix-groups so groupBoxes render
42
+ await route.fulfill({ response: r, json: { ...b, sessions: [
43
+ mk('alpha·1', 'working'), mk('alpha·2', 'working'),
44
+ mk('beta·1', 'idle'), mk('beta·2', 'idle'),
45
+ ] } });
46
+ });
47
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
48
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
49
+ const page = await ctx.newPage();
50
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
51
+ await page.waitForSelector('[data-group-label-glow]', { timeout: 15000 });
52
+ await page.waitForTimeout(800);
53
+
54
+ const rest = await page.evaluate(() => {
55
+ const el = document.querySelector('[data-group-label-glow]');
56
+ if (!el) return null;
57
+ const cs = getComputedStyle(el);
58
+ return {
59
+ glowAttr: el.getAttribute('data-group-label-glow'),
60
+ pinnedAttr: el.getAttribute('data-group-label-pinned'),
61
+ filter: cs.filter,
62
+ transition: cs.transition,
63
+ };
64
+ });
65
+
66
+ await browser.close();
67
+
68
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
69
+ const sourceFilterTernary =
70
+ /filter: isPinned\s+\? `drop-shadow\(0 0 3px \$\{pal\.legendAccent\}80\)`\s+: isHovered\s+\? `drop-shadow\(0 0 3px \$\{pal\.legendAccent\}4d\)`\s+: undefined,/.test(src);
71
+ const sourceAttrTernary =
72
+ /data-group-label-glow=\{isPinned \? 'pin' : isHovered \? 'hover' : 'false'\}/.test(src);
73
+
74
+ const results = {
75
+ rest_glow_false: rest?.glowAttr === 'false',
76
+ rest_pinned_false: rest?.pinnedAttr === 'false',
77
+ rest_filter_none: rest?.filter === 'none' || rest?.filter === '',
78
+ rest_transition_has_filter: /\bfilter\b/.test(rest?.transition || ''),
79
+ source_filter_ternary: sourceFilterTernary,
80
+ source_attr_ternary: sourceAttrTernary,
81
+ };
82
+ const ok = Object.values(results).every(Boolean);
83
+ console.log(`${ok ? '✅' : '❌'} R538 group-label hover-glow (source-canonical):`,
84
+ JSON.stringify(results, null, 2),
85
+ '\n rest:', JSON.stringify(rest));
86
+ process.exit(ok ? 0 : 1);