@sleep2agi/agent-network-dashboard 0.5.1-preview.50 → 0.5.1-preview.52

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 (140) 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 +4 -4
  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.html +1 -1
  13. package/.next/server/app/_not-found.rsc +1 -1
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/admin.html +1 -1
  21. package/.next/server/app/admin.rsc +1 -1
  22. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  23. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  28. package/.next/server/app/index.html +2 -2
  29. package/.next/server/app/index.rsc +2 -2
  30. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/login.html +2 -2
  37. package/.next/server/app/login.rsc +2 -2
  38. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  39. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  40. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  44. package/.next/server/app/logs.html +1 -1
  45. package/.next/server/app/logs.rsc +1 -1
  46. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  52. package/.next/server/app/messages.html +1 -1
  53. package/.next/server/app/messages.rsc +1 -1
  54. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  60. package/.next/server/app/node.html +1 -1
  61. package/.next/server/app/node.rsc +1 -1
  62. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  63. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  68. package/.next/server/app/nodes.html +1 -1
  69. package/.next/server/app/nodes.rsc +1 -1
  70. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  76. package/.next/server/app/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/server-logs.html +1 -1
  78. package/.next/server/app/server-logs.rsc +1 -1
  79. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  85. package/.next/server/app/settings/networks.html +1 -1
  86. package/.next/server/app/settings/networks.rsc +1 -1
  87. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  94. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/settings/tokens.html +1 -1
  96. package/.next/server/app/settings/tokens.rsc +1 -1
  97. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  104. package/.next/server/app/settings.html +2 -2
  105. package/.next/server/app/settings.rsc +2 -2
  106. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  111. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  112. package/.next/server/app/tasks.html +1 -1
  113. package/.next/server/app/tasks.rsc +1 -1
  114. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  120. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
  121. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  126. package/.next/server/middleware-build-manifest.js +3 -3
  127. package/.next/server/pages/404.html +1 -1
  128. package/.next/server/pages/500.html +1 -1
  129. package/.next/static/chunks/{10d4r77zdl_td.js → 0d.y5~kaw7_wr.js} +2 -2
  130. package/.next/static/chunks/{0ivrr8m-3h4h7.js → 0o64sykef6j34.js} +1 -1
  131. package/.next/static/chunks/{0arbuyjlvs835.js → 12uwns~kpmn7m.js} +1 -1
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +53 -2
  135. package/package.json +1 -1
  136. package/scripts/topo-hover-detail-rx-test.mjs +81 -0
  137. package/scripts/topo-spoke-active-opacity-test.mjs +104 -0
  138. /package/.next/static/{9QBAyvu6guSR1QZpVdp6x → I6bweLxxLRF6VUp8f_DvC}/_buildManifest.js +0 -0
  139. /package/.next/static/{9QBAyvu6guSR1QZpVdp6x → I6bweLxxLRF6VUp8f_DvC}/_clientMiddlewareManifest.js +0 -0
  140. /package/.next/static/{9QBAyvu6guSR1QZpVdp6x → I6bweLxxLRF6VUp8f_DvC}/_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.1-preview.49"],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.1-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 +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.1-preview.49"],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.1-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 →"})]})]})]})]})]})}])}]);
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":276,"timestamp":145393645108,"id":4,"parentId":1,"tags":{},"startTime":1778953365891,"traceId":"3a9986f25357871d"},{"name":"load-custom-routes","duration":461,"timestamp":145393645522,"id":5,"parentId":1,"tags":{},"startTime":1778953365892,"traceId":"3a9986f25357871d"},{"name":"create-dist-dir","duration":693,"timestamp":145393646051,"id":6,"parentId":1,"tags":{},"startTime":1778953365892,"traceId":"3a9986f25357871d"},{"name":"clean","duration":34808,"timestamp":145393647402,"id":7,"parentId":1,"tags":{},"startTime":1778953365894,"traceId":"3a9986f25357871d"},{"name":"discover-routes","duration":26314,"timestamp":145393774250,"id":8,"parentId":1,"tags":{},"startTime":1778953366021,"traceId":"3a9986f25357871d"},{"name":"create-root-mapping","duration":196,"timestamp":145393800642,"id":9,"parentId":1,"tags":{},"startTime":1778953366047,"traceId":"3a9986f25357871d"},{"name":"generate-route-types","duration":24208,"timestamp":145393804211,"id":10,"parentId":1,"tags":{},"startTime":1778953366050,"traceId":"3a9986f25357871d"},{"name":"public-dir-conflict-check","duration":99,"timestamp":145393828515,"id":11,"parentId":1,"tags":{},"startTime":1778953366075,"traceId":"3a9986f25357871d"},{"name":"generate-routes-manifest","duration":5033,"timestamp":145393828730,"id":12,"parentId":1,"tags":{},"startTime":1778953366075,"traceId":"3a9986f25357871d"},{"name":"run-turbopack","duration":5788535,"timestamp":145393850184,"id":14,"parentId":1,"tags":{},"startTime":1778953366096,"traceId":"3a9986f25357871d"},{"name":"turbopack-build-events","duration":83,"timestamp":145394149545,"id":15,"parentId":1,"tags":{},"startTime":1778953366396,"traceId":"3a9986f25357871d"},{"name":"run-typescript","duration":9212693,"timestamp":145399649815,"id":16,"parentId":1,"tags":{},"startTime":1778953371896,"traceId":"3a9986f25357871d"},{"name":"generate-required-server-files","duration":2843,"timestamp":145408863612,"id":18,"parentId":1,"tags":{},"startTime":1778953381110,"traceId":"3a9986f25357871d"},{"name":"check-static-error-page","duration":11321,"timestamp":145409058208,"id":20,"parentId":19,"tags":{},"startTime":1778953381304,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":484827,"timestamp":145409072740,"id":65,"parentId":22,"tags":{},"startTime":1778953381319,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":497241,"timestamp":145409060483,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778953381307,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":526160,"timestamp":145409073154,"id":68,"parentId":27,"tags":{},"startTime":1778953381319,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":536450,"timestamp":145409062963,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778953381309,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":553627,"timestamp":145409073778,"id":72,"parentId":32,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":563988,"timestamp":145409063502,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778953381310,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":556438,"timestamp":145409073278,"id":69,"parentId":28,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":566737,"timestamp":145409063055,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778953381309,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":559355,"timestamp":145409073942,"id":73,"parentId":33,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":569749,"timestamp":145409063605,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778953381310,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":561434,"timestamp":145409074043,"id":74,"parentId":34,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":571845,"timestamp":145409063682,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778953381310,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":572564,"timestamp":145409073034,"id":67,"parentId":26,"tags":{},"startTime":1778953381319,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":582797,"timestamp":145409062883,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778953381309,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":574586,"timestamp":145409074071,"id":75,"parentId":35,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":584936,"timestamp":145409063774,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778953381310,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":579054,"timestamp":145409074136,"id":78,"parentId":38,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":588929,"timestamp":145409064320,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":581269,"timestamp":145409074092,"id":76,"parentId":36,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":591292,"timestamp":145409064109,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778953381310,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":583897,"timestamp":145409074146,"id":79,"parentId":39,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":593701,"timestamp":145409064384,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":587015,"timestamp":145409074164,"id":80,"parentId":40,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":596773,"timestamp":145409064450,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":595161,"timestamp":145409074118,"id":77,"parentId":37,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":605090,"timestamp":145409064233,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":595748,"timestamp":145409074191,"id":82,"parentId":44,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":604844,"timestamp":145409065133,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":595984,"timestamp":145409074177,"id":81,"parentId":42,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":605523,"timestamp":145409064689,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":602990,"timestamp":145409074200,"id":83,"parentId":45,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":611954,"timestamp":145409065274,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778953381312,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":606982,"timestamp":145409074225,"id":85,"parentId":47,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":615739,"timestamp":145409065526,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778953381312,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":608116,"timestamp":145409074235,"id":86,"parentId":48,"tags":{},"startTime":1778953381321,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":616787,"timestamp":145409065603,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778953381312,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":612254,"timestamp":145409074248,"id":87,"parentId":49,"tags":{},"startTime":1778953381321,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":620861,"timestamp":145409065690,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778953381312,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":613895,"timestamp":145409074212,"id":84,"parentId":46,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":622747,"timestamp":145409065405,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778953381312,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":615969,"timestamp":145409073697,"id":71,"parentId":30,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":626478,"timestamp":145409063227,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778953381309,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":616762,"timestamp":145409074275,"id":89,"parentId":51,"tags":{},"startTime":1778953381321,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":625242,"timestamp":145409065838,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778953381312,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":614102,"timestamp":145409080139,"id":90,"parentId":24,"tags":{},"startTime":1778953381326,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":633423,"timestamp":145409060862,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778953381307,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":621277,"timestamp":145409073530,"id":70,"parentId":29,"tags":{},"startTime":1778953381320,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":631717,"timestamp":145409063132,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778953381309,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":610788,"timestamp":145409084205,"id":91,"parentId":31,"tags":{},"startTime":1778953381330,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":631740,"timestamp":145409063303,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778953381310,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":620905,"timestamp":145409074262,"id":88,"parentId":50,"tags":{},"startTime":1778953381321,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":629417,"timestamp":145409065776,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778953381312,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":622399,"timestamp":145409072909,"id":66,"parentId":25,"tags":{},"startTime":1778953381319,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":632593,"timestamp":145409062742,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778953381309,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":611573,"timestamp":145409085121,"id":92,"parentId":41,"tags":{},"startTime":1778953381331,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":632225,"timestamp":145409064509,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":612152,"timestamp":145409086458,"id":93,"parentId":43,"tags":{},"startTime":1778953381333,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":633815,"timestamp":145409064838,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778953381311,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":643506,"timestamp":145409072322,"id":64,"parentId":21,"tags":{},"startTime":1778953381319,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":656528,"timestamp":145409059375,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778953381306,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":634742,"timestamp":145409091449,"id":100,"parentId":58,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":658473,"timestamp":145409067789,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778953381314,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":660499,"timestamp":145409091567,"id":101,"parentId":59,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":684051,"timestamp":145409068093,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778953381314,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":667067,"timestamp":145409091435,"id":99,"parentId":56,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":691463,"timestamp":145409067139,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778953381313,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":670522,"timestamp":145409091425,"id":98,"parentId":55,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":695153,"timestamp":145409066900,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778953381313,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":670870,"timestamp":145409091389,"id":95,"parentId":52,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":696059,"timestamp":145409066256,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778953381313,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":680453,"timestamp":145409091612,"id":104,"parentId":63,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":702907,"timestamp":145409069219,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778953381315,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":680849,"timestamp":145409091400,"id":96,"parentId":53,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":705831,"timestamp":145409066452,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778953381313,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":675151,"timestamp":145409097207,"id":105,"parentId":60,"tags":{},"startTime":1778953381343,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":704057,"timestamp":145409068329,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778953381315,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":682256,"timestamp":145409091598,"id":103,"parentId":62,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":704884,"timestamp":145409069027,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778953381315,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":672257,"timestamp":145409105616,"id":106,"parentId":57,"tags":{},"startTime":1778953381352,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":710574,"timestamp":145409067361,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778953381314,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":693600,"timestamp":145409091588,"id":102,"parentId":61,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":716412,"timestamp":145409068830,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778953381315,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":712821,"timestamp":145409091352,"id":94,"parentId":23,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":743568,"timestamp":145409060674,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778953381307,"traceId":"3a9986f25357871d"},{"name":"is-page-static","duration":715159,"timestamp":145409091413,"id":97,"parentId":54,"tags":{},"startTime":1778953381338,"traceId":"3a9986f25357871d"},{"name":"check-page","duration":739989,"timestamp":145409066635,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778953381313,"traceId":"3a9986f25357871d"},{"name":"static-check","duration":749295,"timestamp":145409057371,"id":19,"parentId":1,"tags":{},"startTime":1778953381304,"traceId":"3a9986f25357871d"}]
2
- [{"name":"write-routes-manifest","duration":1052,"timestamp":145409818884,"id":108,"parentId":1,"tags":{},"startTime":1778953382065,"traceId":"3a9986f25357871d"},{"name":"load-dotenv","duration":51,"timestamp":145409835219,"id":111,"parentId":110,"tags":{},"startTime":1778953382081,"traceId":"3a9986f25357871d"},{"name":"run-export-path-map","duration":604,"timestamp":145409838468,"id":112,"parentId":110,"tags":{},"startTime":1778953382085,"traceId":"3a9986f25357871d"},{"name":"next-export","duration":600607,"timestamp":145409833941,"id":110,"parentId":1,"tags":{},"startTime":1778953382080,"traceId":"3a9986f25357871d"},{"name":"move-exported-app-not-found-","duration":592,"timestamp":145410437773,"id":113,"parentId":109,"tags":{},"startTime":1778953382684,"traceId":"3a9986f25357871d"},{"name":"move-exported-app-global-error-","duration":351,"timestamp":145410438456,"id":114,"parentId":109,"tags":{},"startTime":1778953382685,"traceId":"3a9986f25357871d"},{"name":"static-generation","duration":615053,"timestamp":145409826137,"id":109,"parentId":1,"tags":{},"startTime":1778953382072,"traceId":"3a9986f25357871d"},{"name":"write-routes-manifest","duration":536,"timestamp":145410441496,"id":115,"parentId":1,"tags":{},"startTime":1778953382688,"traceId":"3a9986f25357871d"},{"name":"print-tree-view","duration":3696,"timestamp":145410462404,"id":116,"parentId":1,"tags":{},"startTime":1778953382709,"traceId":"3a9986f25357871d"},{"name":"write-route-bundle-stats","duration":13301,"timestamp":145410466132,"id":117,"parentId":1,"tags":{},"startTime":1778953382712,"traceId":"3a9986f25357871d"},{"name":"telemetry-flush","duration":16078,"timestamp":145410479459,"id":118,"parentId":1,"tags":{},"startTime":1778953382726,"traceId":"3a9986f25357871d"},{"name":"next-build","duration":16904035,"timestamp":145393591528,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778953365838,"traceId":"3a9986f25357871d"}]
1
+ [{"name":"generate-buildid","duration":316,"timestamp":146064953907,"id":4,"parentId":1,"tags":{},"startTime":1778954037200,"traceId":"0040107599de6e02"},{"name":"load-custom-routes","duration":494,"timestamp":146064954424,"id":5,"parentId":1,"tags":{},"startTime":1778954037201,"traceId":"0040107599de6e02"},{"name":"create-dist-dir","duration":724,"timestamp":146064954959,"id":6,"parentId":1,"tags":{},"startTime":1778954037201,"traceId":"0040107599de6e02"},{"name":"clean","duration":29989,"timestamp":146064956368,"id":7,"parentId":1,"tags":{},"startTime":1778954037203,"traceId":"0040107599de6e02"},{"name":"discover-routes","duration":11926,"timestamp":146065082772,"id":8,"parentId":1,"tags":{},"startTime":1778954037329,"traceId":"0040107599de6e02"},{"name":"create-root-mapping","duration":174,"timestamp":146065094792,"id":9,"parentId":1,"tags":{},"startTime":1778954037341,"traceId":"0040107599de6e02"},{"name":"generate-route-types","duration":38133,"timestamp":146065097698,"id":10,"parentId":1,"tags":{},"startTime":1778954037344,"traceId":"0040107599de6e02"},{"name":"public-dir-conflict-check","duration":167,"timestamp":146065135951,"id":11,"parentId":1,"tags":{},"startTime":1778954037382,"traceId":"0040107599de6e02"},{"name":"generate-routes-manifest","duration":6918,"timestamp":146065136288,"id":12,"parentId":1,"tags":{},"startTime":1778954037383,"traceId":"0040107599de6e02"},{"name":"run-turbopack","duration":5955079,"timestamp":146065152526,"id":14,"parentId":1,"tags":{},"startTime":1778954037399,"traceId":"0040107599de6e02"},{"name":"turbopack-build-events","duration":77,"timestamp":146065447064,"id":15,"parentId":1,"tags":{},"startTime":1778954037693,"traceId":"0040107599de6e02"},{"name":"run-typescript","duration":9396296,"timestamp":146071122216,"id":16,"parentId":1,"tags":{},"startTime":1778954043368,"traceId":"0040107599de6e02"},{"name":"generate-required-server-files","duration":2550,"timestamp":146080519799,"id":18,"parentId":1,"tags":{},"startTime":1778954052766,"traceId":"0040107599de6e02"},{"name":"check-static-error-page","duration":15606,"timestamp":146080685184,"id":20,"parentId":19,"tags":{},"startTime":1778954052931,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":453028,"timestamp":146080703607,"id":65,"parentId":22,"tags":{},"startTime":1778954052950,"traceId":"0040107599de6e02"},{"name":"check-page","duration":468456,"timestamp":146080688367,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778954052935,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":542521,"timestamp":146080705520,"id":68,"parentId":27,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":556376,"timestamp":146080691772,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778954052938,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":564858,"timestamp":146080705817,"id":70,"parentId":29,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":578694,"timestamp":146080692061,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778954052938,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":567739,"timestamp":146080703222,"id":64,"parentId":21,"tags":{},"startTime":1778954052949,"traceId":"0040107599de6e02"},{"name":"check-page","duration":584226,"timestamp":146080686763,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778954052933,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":566963,"timestamp":146080705925,"id":71,"parentId":30,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":580736,"timestamp":146080692211,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778954052938,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":570997,"timestamp":146080706113,"id":73,"parentId":33,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":584434,"timestamp":146080692729,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778954052939,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":572286,"timestamp":146080705602,"id":69,"parentId":28,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":586021,"timestamp":146080691923,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778954052938,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":576749,"timestamp":146080706267,"id":77,"parentId":37,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":589409,"timestamp":146080693651,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778954052940,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":582293,"timestamp":146080705970,"id":72,"parentId":32,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":595717,"timestamp":146080692600,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778954052939,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":595343,"timestamp":146080706361,"id":79,"parentId":39,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":607822,"timestamp":146080693932,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778954052940,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":597546,"timestamp":146080704419,"id":66,"parentId":25,"tags":{},"startTime":1778954052951,"traceId":"0040107599de6e02"},{"name":"check-page","duration":610566,"timestamp":146080691462,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778954052938,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":595936,"timestamp":146080706241,"id":76,"parentId":36,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":608741,"timestamp":146080693463,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778954052940,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":600908,"timestamp":146080706375,"id":80,"parentId":40,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":613267,"timestamp":146080694059,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778954052940,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":604814,"timestamp":146080705417,"id":67,"parentId":26,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":618631,"timestamp":146080691641,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778954052938,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":613225,"timestamp":146080706425,"id":83,"parentId":45,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":624675,"timestamp":146080695016,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778954052941,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":613611,"timestamp":146080706218,"id":75,"parentId":35,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":626882,"timestamp":146080692974,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778954052939,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":613546,"timestamp":146080706411,"id":82,"parentId":44,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":625130,"timestamp":146080694859,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778954052941,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":613774,"timestamp":146080706343,"id":78,"parentId":38,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":626339,"timestamp":146080693805,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778954052940,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":621689,"timestamp":146080706493,"id":88,"parentId":50,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":630931,"timestamp":146080697290,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778954052944,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":626254,"timestamp":146080706482,"id":87,"parentId":49,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":635680,"timestamp":146080697110,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778954052943,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":627578,"timestamp":146080706467,"id":86,"parentId":48,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":638745,"timestamp":146080695339,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778954052942,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":632012,"timestamp":146080706450,"id":85,"parentId":47,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":643266,"timestamp":146080695237,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778954052942,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":627619,"timestamp":146080711134,"id":91,"parentId":31,"tags":{},"startTime":1778954052957,"traceId":"0040107599de6e02"},{"name":"check-page","duration":646469,"timestamp":146080692330,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778954052939,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":630565,"timestamp":146080709926,"id":90,"parentId":24,"tags":{},"startTime":1778954052956,"traceId":"0040107599de6e02"},{"name":"check-page","duration":651639,"timestamp":146080688891,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778954052935,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":621833,"timestamp":146080721519,"id":93,"parentId":43,"tags":{},"startTime":1778954052968,"traceId":"0040107599de6e02"},{"name":"check-page","duration":648833,"timestamp":146080694557,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778954052941,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":638084,"timestamp":146080706437,"id":84,"parentId":46,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":649444,"timestamp":146080695120,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778954052941,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":641909,"timestamp":146080706508,"id":89,"parentId":51,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":651067,"timestamp":146080697392,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778954052944,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":641068,"timestamp":146080711991,"id":92,"parentId":41,"tags":{},"startTime":1778954052958,"traceId":"0040107599de6e02"},{"name":"check-page","duration":658961,"timestamp":146080694158,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778954052940,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":652013,"timestamp":146080706395,"id":81,"parentId":42,"tags":{},"startTime":1778954052953,"traceId":"0040107599de6e02"},{"name":"check-page","duration":664041,"timestamp":146080694410,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778954052941,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":671319,"timestamp":146080706187,"id":74,"parentId":34,"tags":{},"startTime":1778954052952,"traceId":"0040107599de6e02"},{"name":"check-page","duration":684700,"timestamp":146080692858,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778954052939,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":657049,"timestamp":146080728304,"id":100,"parentId":58,"tags":{},"startTime":1778954052975,"traceId":"0040107599de6e02"},{"name":"check-page","duration":686010,"timestamp":146080699390,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778954052946,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":664379,"timestamp":146080728457,"id":101,"parentId":59,"tags":{},"startTime":1778954052975,"traceId":"0040107599de6e02"},{"name":"check-page","duration":693278,"timestamp":146080699605,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778954052946,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":676206,"timestamp":146080723932,"id":95,"parentId":52,"tags":{},"startTime":1778954052970,"traceId":"0040107599de6e02"},{"name":"check-page","duration":702412,"timestamp":146080697799,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778954052944,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":672884,"timestamp":146080728483,"id":102,"parentId":61,"tags":{},"startTime":1778954052975,"traceId":"0040107599de6e02"},{"name":"check-page","duration":701170,"timestamp":146080700240,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778954052947,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":679092,"timestamp":146080723901,"id":94,"parentId":23,"tags":{},"startTime":1778954052970,"traceId":"0040107599de6e02"},{"name":"check-page","duration":714425,"timestamp":146080688635,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778954052935,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":679895,"timestamp":146080728511,"id":104,"parentId":63,"tags":{},"startTime":1778954052975,"traceId":"0040107599de6e02"},{"name":"check-page","duration":707920,"timestamp":146080700526,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778954052947,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":684981,"timestamp":146080723963,"id":97,"parentId":54,"tags":{},"startTime":1778954052970,"traceId":"0040107599de6e02"},{"name":"check-page","duration":710834,"timestamp":146080698146,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778954052944,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":664357,"timestamp":146080746493,"id":105,"parentId":57,"tags":{},"startTime":1778954052993,"traceId":"0040107599de6e02"},{"name":"check-page","duration":712082,"timestamp":146080698805,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778954052945,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":687897,"timestamp":146080723946,"id":96,"parentId":53,"tags":{},"startTime":1778954052970,"traceId":"0040107599de6e02"},{"name":"check-page","duration":713910,"timestamp":146080697971,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778954052944,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":684997,"timestamp":146080728496,"id":103,"parentId":62,"tags":{},"startTime":1778954052975,"traceId":"0040107599de6e02"},{"name":"check-page","duration":713149,"timestamp":146080700385,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778954052947,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":689644,"timestamp":146080723979,"id":98,"parentId":55,"tags":{},"startTime":1778954052970,"traceId":"0040107599de6e02"},{"name":"check-page","duration":715301,"timestamp":146080698348,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778954052945,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":658356,"timestamp":146080755365,"id":106,"parentId":60,"tags":{},"startTime":1778954053002,"traceId":"0040107599de6e02"},{"name":"check-page","duration":713950,"timestamp":146080699794,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778954052946,"traceId":"0040107599de6e02"},{"name":"is-page-static","duration":693094,"timestamp":146080723990,"id":99,"parentId":56,"tags":{},"startTime":1778954052970,"traceId":"0040107599de6e02"},{"name":"check-page","duration":718561,"timestamp":146080698555,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778954052945,"traceId":"0040107599de6e02"},{"name":"static-check","duration":733095,"timestamp":146080684049,"id":19,"parentId":1,"tags":{},"startTime":1778954052930,"traceId":"0040107599de6e02"}]
2
+ [{"name":"write-routes-manifest","duration":605,"timestamp":146081426863,"id":108,"parentId":1,"tags":{},"startTime":1778954053673,"traceId":"0040107599de6e02"},{"name":"load-dotenv","duration":42,"timestamp":146081437493,"id":111,"parentId":110,"tags":{},"startTime":1778954053684,"traceId":"0040107599de6e02"},{"name":"run-export-path-map","duration":503,"timestamp":146081440389,"id":112,"parentId":110,"tags":{},"startTime":1778954053687,"traceId":"0040107599de6e02"},{"name":"next-export","duration":626861,"timestamp":146081436273,"id":110,"parentId":1,"tags":{},"startTime":1778954053683,"traceId":"0040107599de6e02"},{"name":"move-exported-app-not-found-","duration":658,"timestamp":146082066390,"id":113,"parentId":109,"tags":{},"startTime":1778954054313,"traceId":"0040107599de6e02"},{"name":"move-exported-app-global-error-","duration":418,"timestamp":146082067141,"id":114,"parentId":109,"tags":{},"startTime":1778954054313,"traceId":"0040107599de6e02"},{"name":"static-generation","duration":638629,"timestamp":146081430936,"id":109,"parentId":1,"tags":{},"startTime":1778954053677,"traceId":"0040107599de6e02"},{"name":"write-routes-manifest","duration":469,"timestamp":146082069810,"id":115,"parentId":1,"tags":{},"startTime":1778954054316,"traceId":"0040107599de6e02"},{"name":"print-tree-view","duration":4083,"timestamp":146082087357,"id":116,"parentId":1,"tags":{},"startTime":1778954054334,"traceId":"0040107599de6e02"},{"name":"write-route-bundle-stats","duration":12338,"timestamp":146082091469,"id":117,"parentId":1,"tags":{},"startTime":1778954054338,"traceId":"0040107599de6e02"},{"name":"telemetry-flush","duration":22321,"timestamp":146082103832,"id":118,"parentId":1,"tags":{},"startTime":1778954054350,"traceId":"0040107599de6e02"},{"name":"next-build","duration":17223348,"timestamp":146064902845,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778954037149,"traceId":"0040107599de6e02"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5788535,"timestamp":145393850184,"id":14,"parentId":1,"tags":{},"startTime":1778953366096,"traceId":"3a9986f25357871d"},{"name":"turbopack-build-events","duration":83,"timestamp":145394149545,"id":15,"parentId":1,"tags":{},"startTime":1778953366396,"traceId":"3a9986f25357871d"},{"name":"run-typescript","duration":9212693,"timestamp":145399649815,"id":16,"parentId":1,"tags":{},"startTime":1778953371896,"traceId":"3a9986f25357871d"},{"name":"static-check","duration":749295,"timestamp":145409057371,"id":19,"parentId":1,"tags":{},"startTime":1778953381304,"traceId":"3a9986f25357871d"},{"name":"static-generation","duration":615053,"timestamp":145409826137,"id":109,"parentId":1,"tags":{},"startTime":1778953382072,"traceId":"3a9986f25357871d"},{"name":"telemetry-flush","duration":16078,"timestamp":145410479459,"id":118,"parentId":1,"tags":{},"startTime":1778953382726,"traceId":"3a9986f25357871d"},{"name":"next-build","duration":16904035,"timestamp":145393591528,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778953365838,"traceId":"3a9986f25357871d"}]
1
+ [{"name":"run-turbopack","duration":5955079,"timestamp":146065152526,"id":14,"parentId":1,"tags":{},"startTime":1778954037399,"traceId":"0040107599de6e02"},{"name":"turbopack-build-events","duration":77,"timestamp":146065447064,"id":15,"parentId":1,"tags":{},"startTime":1778954037693,"traceId":"0040107599de6e02"},{"name":"run-typescript","duration":9396296,"timestamp":146071122216,"id":16,"parentId":1,"tags":{},"startTime":1778954043368,"traceId":"0040107599de6e02"},{"name":"static-check","duration":733095,"timestamp":146080684049,"id":19,"parentId":1,"tags":{},"startTime":1778954052930,"traceId":"0040107599de6e02"},{"name":"static-generation","duration":638629,"timestamp":146081430936,"id":109,"parentId":1,"tags":{},"startTime":1778954053677,"traceId":"0040107599de6e02"},{"name":"telemetry-flush","duration":22321,"timestamp":146082103832,"id":118,"parentId":1,"tags":{},"startTime":1778954054350,"traceId":"0040107599de6e02"},{"name":"next-build","duration":17223348,"timestamp":146064902845,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778954037149,"traceId":"0040107599de6e02"}]
@@ -3883,6 +3883,31 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
3883
3883
  // node radius. Geometry-safe; paint-only. R51 sentinel
3884
3884
  // strokeWidth 1.5/3 untouched (idle=1, active=2). data-
3885
3885
  // topo-hub-spoke-linecap attr exposes the value for tests.
3886
+ // Round 391 / Loop: hub-spoke active opacity 0.7 → 0.8.
3887
+ // Pre-R391 active spokes (the spoke connecting the hub
3888
+ // to the currently-active alias — hovered or pinned)
3889
+ // lifted opacity from rest 0.45 to active 0.7 — a clear
3890
+ // step but slightly understated against the canvas
3891
+ // chrome. R391 lifts active to 0.8 so the "this spoke
3892
+ // connects to your active node" signal reads with
3893
+ // matching weight to the R370 hub hover-ring opacity
3894
+ // (0.7 → 0.8 cyber) — paired canvas signals now share
3895
+ // the same active-state alpha (0.8) so when a user
3896
+ // hovers a node, both the spoke and the hub-ring lift
3897
+ // to identical opacity. Rest 0.45 invariant preserved.
3898
+ // Theme-consistency / canvas-presence polish family
3899
+ // (6th anchor):
3900
+ // R370 hub hover-ring opacity 0.7 → 0.8 cyber
3901
+ // R371 edge-badge rest opacity 0.82 → 0.85 cyber
3902
+ // R372 minimap offline-dot opacity 0.5 → 0.6
3903
+ // R386 hub-highlight idle opacity 0.9 → 0.95
3904
+ // R387 hover-detail panel opacity 0.94 → 0.97 cyber
3905
+ // R391 hub-spoke active opacity 0.7 → 0.8 (this round)
3906
+ // Idle path (45% alpha + dashed flow animation) entirely
3907
+ // untouched — R391 is an active-state-only lift.
3908
+ // data-topo-hub-spoke-opacity attr exposes the resolved
3909
+ // value for tests. R382 strokeLinecap='round' + R51
3910
+ // sentinel-safe sw (1 idle / 2 active) preserved.
3886
3911
  return (
3887
3912
  <path
3888
3913
  key={`hub-${session.alias}`}
@@ -3892,11 +3917,12 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
3892
3917
  strokeWidth={isActiveSpoke ? 2 : 1}
3893
3918
  strokeDasharray={isActiveSpoke ? 'none' : '6 14'}
3894
3919
  strokeLinecap="round"
3895
- opacity={isActiveSpoke ? 0.7 : 0.45}
3920
+ opacity={isActiveSpoke ? 0.8 : 0.45}
3896
3921
  className={isActiveSpoke ? undefined : 'anet-topo-spoke-flow'}
3897
3922
  data-topo-spoke-bucket={isActiveSpoke ? undefined : busy}
3898
3923
  data-topo-spoke-dur={isActiveSpoke ? undefined : spokeDur}
3899
3924
  data-topo-hub-spoke-active={isActiveSpoke ? 'true' : 'false'}
3925
+ data-topo-hub-spoke-opacity={isActiveSpoke ? 0.8 : 0.45}
3900
3926
  data-topo-hub-spoke-linecap="round"
3901
3927
  style={{
3902
3928
  transition: 'stroke 250ms ease-out, stroke-width 250ms ease-out, opacity 250ms ease-out',
@@ -6622,12 +6648,37 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6622
6648
  the resolved value for tests. R348 drop-shadow
6623
6649
  + rx=8 + stroke=pal.legendAccent + fill=pal.
6624
6650
  labelBox.fill all preserved. */}
6651
+ {/* Round 390 / Loop: hover-detail card rx 8 → 10.
6652
+ Corner-radius cascade family — the hover-detail
6653
+ card is a panel-tier surface (192×88 floating
6654
+ info card with drop-shadow + stroke), so its
6655
+ corner radius should match the R331 panel tier
6656
+ (rx=10) used by the recent-signal and legend
6657
+ panels. Pre-R390 it shared rx=8 with the R332
6658
+ minimap and R375/R376 segmented-control tier
6659
+ (Layout-toggle, nodeSize, zoom wrappers),
6660
+ which is the "compact chrome control" tier —
6661
+ a tier mismatch for a content-bearing panel.
6662
+ Corner-radius cascade (6 anchors now):
6663
+ R330 canvas rx 12 (root)
6664
+ R331 panels rx 10 (recent-signal, legend)
6665
+ R332 minimap rx 8 (compact chrome)
6666
+ R375 Layout-toggle rx 8 (segmented control)
6667
+ R376 nodeSize/zoom rx 8 (segmented control)
6668
+ R390 hover-detail rx 10 (panel — this round)
6669
+ Pure paint change; no layout shift (rx grows
6670
+ the corner curve INWARD without changing the
6671
+ card's outer bbox). data-topo-hover-detail-
6672
+ rx attr exposes the resolved value for tests.
6673
+ R348 drop-shadow + stroke + R387 opacity all
6674
+ preserved. */}
6625
6675
  <rect
6626
- x="0" y="0" width={detailW} height={detailH} rx="8"
6676
+ x="0" y="0" width={detailW} height={detailH} rx="10"
6627
6677
  fill={pal.labelBox.fill}
6628
6678
  stroke={pal.legendAccent}
6629
6679
  opacity={isLight ? 0.98 : 0.97}
6630
6680
  data-topo-hover-detail-opacity={isLight ? 0.98 : 0.97}
6681
+ data-topo-hover-detail-rx="10"
6631
6682
  style={{ filter: isLight ? 'drop-shadow(0 4px 12px rgba(15,23,42,0.16))' : 'drop-shadow(0 4px 12px rgba(0,0,0,0.6))' }}
6632
6683
  />
6633
6684
  <text x="10" y="16" fontSize="9" fontFamily="monospace" fill={pal.legendAccent} fontWeight="700">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.50",
3
+ "version": "0.5.1-preview.52",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,81 @@
1
+ /* Round 390 verification: hover-detail card rx 8 → 10. Aligns the
2
+ * card with the R331 panel tier (recent-signal, legend at rx=10)
3
+ * instead of the R332/R375/R376 compact-chrome / segmented-control
4
+ * tier (rx=8). Pure paint change — no layout shift, no bbox change.
5
+ *
6
+ * Contract:
7
+ * - On hover, the hover-detail card mounts and:
8
+ * * <rect> rx attr === '10'
9
+ * * data-topo-hover-detail-rx === '10'
10
+ * * Stays clear of the R332 minimap viewport (different element)
11
+ * - Pre-R390 invariants preserved:
12
+ * * R348 drop-shadow filter present
13
+ * * R387 opacity attr === '0.97' (cyber)
14
+ * * stroke present (pal.legendAccent)
15
+ * * width / height (192 / 88) unchanged
16
+ */
17
+ import { chromium } from 'playwright';
18
+ import { readFileSync } from 'node:fs';
19
+
20
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
21
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
22
+
23
+ const browser = await chromium.launch({ headless: true });
24
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
25
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
26
+ await ctx.addInitScript(() => {
27
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
28
+ });
29
+ await ctx.route('**/api/hub/status*', async (route) => {
30
+ const r = await route.fetch();
31
+ const b = await r.json();
32
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
33
+ const mk = (alias) => ({
34
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
35
+ network_id: nid, project_dir: null,
36
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
37
+ });
38
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('alpha'), mk('beta') ] } });
39
+ });
40
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
41
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
42
+
43
+ const page = await ctx.newPage();
44
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
45
+ await page.waitForSelector('g[data-node]', { timeout: 15000 });
46
+ await page.waitForTimeout(300);
47
+ await page.hover('g[data-node]');
48
+ await page.waitForSelector('[data-topo-hover-detail]', { timeout: 5000 });
49
+ await page.waitForTimeout(300);
50
+
51
+ const probe = await page.evaluate(() => {
52
+ const card = document.querySelector('[data-topo-hover-detail]');
53
+ if (!card) return null;
54
+ const rect = card.querySelector('rect');
55
+ return {
56
+ rxAttr: rect?.getAttribute('rx') ?? null,
57
+ rxData: rect?.getAttribute('data-topo-hover-detail-rx') ?? null,
58
+ opacityAttr: rect?.getAttribute('opacity') ?? null,
59
+ widthAttr: rect?.getAttribute('width') ?? null,
60
+ heightAttr: rect?.getAttribute('height') ?? null,
61
+ strokeAttr: rect?.getAttribute('stroke') ?? null,
62
+ styleAttr: rect?.getAttribute('style') ?? '',
63
+ };
64
+ });
65
+
66
+ await browser.close();
67
+
68
+ const results = {
69
+ // R390: rx 8 → 10
70
+ rx_attr_10: probe?.rxAttr === '10',
71
+ rx_data_10: probe?.rxData === '10',
72
+ // Pre-R390 invariants preserved
73
+ opacity_cyber_0_97: probe?.opacityAttr === '0.97', // R387 invariant
74
+ width_192: probe?.widthAttr === '192',
75
+ height_88: probe?.heightAttr === '88',
76
+ stroke_present: !!probe?.strokeAttr && probe.strokeAttr !== 'none',
77
+ drop_shadow_present: probe?.styleAttr.includes('drop-shadow'),
78
+ };
79
+ const ok = Object.values(results).every(Boolean);
80
+ console.log(`${ok ? '✅' : '❌'} hover-detail card rx 8 → 10:`, JSON.stringify(results), '\n probe:', probe);
81
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,104 @@
1
+ /* Round 391 verification: hub-spoke active opacity 0.7 → 0.8. An
2
+ * "active" spoke is one whose alias has recent message traffic
3
+ * (activeAliases is populated from buildFlowLinks(messages)). The
4
+ * lift unifies active-spoke alpha with R370 hub hover-ring opacity
5
+ * 0.7 → 0.8 cyber — paired canvas signals at matching alpha.
6
+ *
7
+ * Contract:
8
+ * - When the alias appears as flow-link from/to, its spoke has:
9
+ * * opacity attr === '0.8'
10
+ * * data-topo-hub-spoke-opacity === '0.8'
11
+ * * data-topo-hub-spoke-active === 'true'
12
+ * - Idle spokes (no flow traffic) unchanged:
13
+ * * opacity attr === '0.45'
14
+ * * data-topo-hub-spoke-active === 'false'
15
+ * - Pre-R391 invariants preserved on the active spoke:
16
+ * * R382 strokeLinecap='round'
17
+ * * R51-safe strokeWidth=2 (active)
18
+ */
19
+ import { chromium } from 'playwright';
20
+ import { readFileSync } from 'node:fs';
21
+
22
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
23
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
24
+
25
+ const browser = await chromium.launch({ headless: true });
26
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
27
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
28
+ await ctx.addInitScript(() => {
29
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
30
+ });
31
+ await ctx.route('**/api/hub/status*', async (route) => {
32
+ const r = await route.fetch();
33
+ const b = await r.json();
34
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
35
+ const mk = (alias) => ({
36
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
37
+ network_id: nid, project_dir: null,
38
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
39
+ });
40
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('alpha'), mk('beta'), mk('gamma') ] } });
41
+ });
42
+ // Seed a flow link between alpha and beta so their spokes become
43
+ // active; gamma stays idle. activeAliases = { alpha, beta }.
44
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({
45
+ json: {
46
+ messages: [
47
+ { id: 'm1', from_alias: 'alpha', to_alias: 'beta', content: 'ping', created_at: fresh, network_id: 'default' },
48
+ { id: 'm2', from_alias: 'alpha', to_alias: 'beta', content: 'pong', created_at: fresh, network_id: 'default' },
49
+ ],
50
+ },
51
+ }));
52
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
53
+
54
+ const page = await ctx.newPage();
55
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
56
+ await page.waitForSelector('g[data-node]', { timeout: 15000 });
57
+ await page.waitForTimeout(300);
58
+
59
+ // Wait for the dashboard to ingest the seeded messages and recompute
60
+ // activeAliases. The flow-links derivation runs in a useMemo that
61
+ // depends on `messages`; allow a tick for SWR/state propagation.
62
+ await page.waitForTimeout(800);
63
+
64
+ const probe = await page.evaluate(() => {
65
+ const spokes = Array.from(document.querySelectorAll('[data-topo-hub-spoke-active]'));
66
+ const active = spokes.filter((s) => s.getAttribute('data-topo-hub-spoke-active') === 'true');
67
+ const idle = spokes.filter((s) => s.getAttribute('data-topo-hub-spoke-active') === 'false');
68
+ const read = (el) => el ? ({
69
+ opacityAttr: el.getAttribute('opacity'),
70
+ opacityData: el.getAttribute('data-topo-hub-spoke-opacity'),
71
+ strokeWidth: el.getAttribute('stroke-width'),
72
+ linecap: el.getAttribute('stroke-linecap'),
73
+ }) : null;
74
+ return {
75
+ total: spokes.length,
76
+ activeCount: active.length,
77
+ idleCount: idle.length,
78
+ activeSample: read(active[0]),
79
+ idleSample: read(idle[0]),
80
+ };
81
+ });
82
+
83
+ await browser.close();
84
+
85
+ const results = {
86
+ // 3 spokes total (alpha, beta, gamma)
87
+ total_3_spokes: probe.total === 3,
88
+ // alpha + beta active (flow link)
89
+ active_2_spokes: probe.activeCount === 2,
90
+ idle_1_spoke: probe.idleCount === 1,
91
+ // R391: active opacity '0.8' (was '0.7')
92
+ active_opacity_0_8: probe.activeSample?.opacityAttr === '0.8',
93
+ active_data_0_8: probe.activeSample?.opacityData === '0.8',
94
+ // Idle invariant
95
+ idle_opacity_0_45: probe.idleSample?.opacityAttr === '0.45',
96
+ idle_data_0_45: probe.idleSample?.opacityData === '0.45',
97
+ // R382 + R51-safe invariants on active spoke
98
+ active_linecap_round: probe.activeSample?.linecap === 'round',
99
+ active_strokeWidth_2: probe.activeSample?.strokeWidth === '2',
100
+ };
101
+ const ok = Object.values(results).every(Boolean);
102
+ console.log(`${ok ? '✅' : '❌'} hub-spoke active opacity 0.7 → 0.8:`, JSON.stringify(results),
103
+ '\n probe:', JSON.stringify(probe, null, 2));
104
+ process.exit(ok ? 0 : 1);