@sleep2agi/agent-network-dashboard 0.5.1-preview.66 → 0.5.1-preview.68

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/{06xpgr~ljg-so.js → 0hannsk~p5sjc.js} +2 -2
  130. package/.next/static/chunks/{0oge56y7wyv07.js → 0rtdswjsz0em6.js} +1 -1
  131. package/.next/static/chunks/{0bmuo_~tnu3eu.js → 15b.z4cz5arvv.js} +1 -1
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +59 -7
  135. package/package.json +1 -1
  136. package/scripts/topo-edge-freshness-floor-test.mjs +99 -0
  137. package/scripts/topo-node-halo-offline-opacity-test.mjs +87 -0
  138. /package/.next/static/{nZA6I2WlboppxV3ccft1K → urudwbBaMeFYVotTRH7yJ}/_buildManifest.js +0 -0
  139. /package/.next/static/{nZA6I2WlboppxV3ccft1K → urudwbBaMeFYVotTRH7yJ}/_clientMiddlewareManifest.js +0 -0
  140. /package/.next/static/{nZA6I2WlboppxV3ccft1K → urudwbBaMeFYVotTRH7yJ}/_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.65"],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.67"],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.65"],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.67"],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":315,"timestamp":151209515527,"id":4,"parentId":1,"tags":{},"startTime":1778959181762,"traceId":"8d720ab1517efe94"},{"name":"load-custom-routes","duration":470,"timestamp":151209516020,"id":5,"parentId":1,"tags":{},"startTime":1778959181762,"traceId":"8d720ab1517efe94"},{"name":"create-dist-dir","duration":787,"timestamp":151209516533,"id":6,"parentId":1,"tags":{},"startTime":1778959181763,"traceId":"8d720ab1517efe94"},{"name":"clean","duration":41431,"timestamp":151209518037,"id":7,"parentId":1,"tags":{},"startTime":1778959181764,"traceId":"8d720ab1517efe94"},{"name":"discover-routes","duration":28105,"timestamp":151209650577,"id":8,"parentId":1,"tags":{},"startTime":1778959181897,"traceId":"8d720ab1517efe94"},{"name":"create-root-mapping","duration":139,"timestamp":151209678747,"id":9,"parentId":1,"tags":{},"startTime":1778959181925,"traceId":"8d720ab1517efe94"},{"name":"generate-route-types","duration":19344,"timestamp":151209681780,"id":10,"parentId":1,"tags":{},"startTime":1778959181928,"traceId":"8d720ab1517efe94"},{"name":"public-dir-conflict-check","duration":101,"timestamp":151209701208,"id":11,"parentId":1,"tags":{},"startTime":1778959181947,"traceId":"8d720ab1517efe94"},{"name":"generate-routes-manifest","duration":5452,"timestamp":151209701428,"id":12,"parentId":1,"tags":{},"startTime":1778959181948,"traceId":"8d720ab1517efe94"},{"name":"run-turbopack","duration":5864622,"timestamp":151209713086,"id":14,"parentId":1,"tags":{},"startTime":1778959181959,"traceId":"8d720ab1517efe94"},{"name":"turbopack-build-events","duration":116,"timestamp":151210009716,"id":15,"parentId":1,"tags":{},"startTime":1778959182256,"traceId":"8d720ab1517efe94"},{"name":"run-typescript","duration":9212491,"timestamp":151215600224,"id":16,"parentId":1,"tags":{},"startTime":1778959187847,"traceId":"8d720ab1517efe94"},{"name":"generate-required-server-files","duration":2273,"timestamp":151224813829,"id":18,"parentId":1,"tags":{},"startTime":1778959197060,"traceId":"8d720ab1517efe94"},{"name":"check-static-error-page","duration":11033,"timestamp":151224965500,"id":20,"parentId":19,"tags":{},"startTime":1778959197212,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":465713,"timestamp":151224978741,"id":65,"parentId":22,"tags":{},"startTime":1778959197225,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":476914,"timestamp":151224967707,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778959197214,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":541071,"timestamp":151224978891,"id":66,"parentId":25,"tags":{},"startTime":1778959197225,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":550126,"timestamp":151224969991,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778959197216,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":546635,"timestamp":151224980236,"id":67,"parentId":26,"tags":{},"startTime":1778959197227,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":556765,"timestamp":151224970173,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778959197216,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":551100,"timestamp":151224980507,"id":69,"parentId":28,"tags":{},"startTime":1778959197227,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":561244,"timestamp":151224970415,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778959197217,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":550872,"timestamp":151224981237,"id":73,"parentId":33,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":560977,"timestamp":151224971182,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778959197217,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":563952,"timestamp":151224980388,"id":68,"parentId":27,"tags":{},"startTime":1778959197227,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":574297,"timestamp":151224970278,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778959197217,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":577451,"timestamp":151224981055,"id":72,"parentId":32,"tags":{},"startTime":1778959197227,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":587489,"timestamp":151224971084,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778959197217,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":577378,"timestamp":151224981351,"id":75,"parentId":35,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":587420,"timestamp":151224971342,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":582147,"timestamp":151224981323,"id":74,"parentId":34,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":592266,"timestamp":151224971263,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":586722,"timestamp":151224980970,"id":71,"parentId":30,"tags":{},"startTime":1778959197227,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":597049,"timestamp":151224970698,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778959197217,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":590180,"timestamp":151224981418,"id":78,"parentId":38,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":599781,"timestamp":151224971874,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":593941,"timestamp":151224981401,"id":77,"parentId":37,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":603622,"timestamp":151224971770,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":597359,"timestamp":151224981372,"id":76,"parentId":36,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":607113,"timestamp":151224971662,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":598109,"timestamp":151224981429,"id":79,"parentId":39,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":607639,"timestamp":151224971947,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":601390,"timestamp":151224981465,"id":82,"parentId":44,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":610366,"timestamp":151224972534,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778959197219,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":606745,"timestamp":151224980802,"id":70,"parentId":29,"tags":{},"startTime":1778959197227,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":617058,"timestamp":151224970542,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778959197217,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":610244,"timestamp":151224981503,"id":85,"parentId":47,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":619070,"timestamp":151224972749,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778959197219,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":613247,"timestamp":151224981456,"id":81,"parentId":42,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":622490,"timestamp":151224972267,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778959197219,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":614987,"timestamp":151224981475,"id":83,"parentId":45,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":623892,"timestamp":151224972617,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778959197219,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":615185,"timestamp":151224981489,"id":84,"parentId":46,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":624030,"timestamp":151224972678,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778959197219,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":615336,"timestamp":151224981527,"id":87,"parentId":49,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":622804,"timestamp":151224974094,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778959197220,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":620652,"timestamp":151224981513,"id":86,"parentId":48,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":629375,"timestamp":151224972830,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778959197219,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":620928,"timestamp":151224981549,"id":89,"parentId":51,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":628198,"timestamp":151224974314,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778959197221,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":621106,"timestamp":151224981540,"id":88,"parentId":50,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":628425,"timestamp":151224974246,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778959197221,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":621321,"timestamp":151224981443,"id":80,"parentId":40,"tags":{},"startTime":1778959197228,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":630774,"timestamp":151224972025,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":615147,"timestamp":151224987759,"id":90,"parentId":24,"tags":{},"startTime":1778959197234,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":634784,"timestamp":151224968144,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778959197214,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":615160,"timestamp":151224988779,"id":91,"parentId":31,"tags":{},"startTime":1778959197235,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":633138,"timestamp":151224970843,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778959197217,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":625023,"timestamp":151224990939,"id":93,"parentId":43,"tags":{},"startTime":1778959197237,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":643693,"timestamp":151224972356,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778959197219,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":626582,"timestamp":151224989632,"id":92,"parentId":41,"tags":{},"startTime":1778959197236,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":644157,"timestamp":151224972089,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778959197218,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":667195,"timestamp":151224978431,"id":64,"parentId":21,"tags":{},"startTime":1778959197225,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":679083,"timestamp":151224966618,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778959197213,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":659573,"timestamp":151224993362,"id":100,"parentId":58,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":677369,"timestamp":151224975623,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778959197222,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":671117,"timestamp":151224993327,"id":97,"parentId":54,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":689731,"timestamp":151224974814,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778959197221,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":679202,"timestamp":151224993336,"id":98,"parentId":55,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":697662,"timestamp":151224974949,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778959197221,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":679496,"timestamp":151224993266,"id":94,"parentId":23,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":704872,"timestamp":151224967936,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778959197214,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":681636,"timestamp":151224993487,"id":102,"parentId":61,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":699000,"timestamp":151224976180,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778959197222,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":687816,"timestamp":151224993313,"id":96,"parentId":53,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":706476,"timestamp":151224974704,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778959197221,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":677566,"timestamp":151225005079,"id":105,"parentId":57,"tags":{},"startTime":1778959197251,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":707421,"timestamp":151224975261,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778959197222,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":691173,"timestamp":151224993515,"id":104,"parentId":63,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":708361,"timestamp":151224976367,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778959197223,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":692658,"timestamp":151224993503,"id":103,"parentId":62,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":709921,"timestamp":151224976277,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778959197223,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":673572,"timestamp":151225013906,"id":106,"parentId":60,"tags":{},"startTime":1778959197260,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":711625,"timestamp":151224975894,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778959197222,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":696069,"timestamp":151224993471,"id":101,"parentId":59,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":713814,"timestamp":151224975764,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778959197222,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":696722,"timestamp":151224993349,"id":99,"parentId":56,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":714992,"timestamp":151224975099,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778959197221,"traceId":"8d720ab1517efe94"},{"name":"is-page-static","duration":699310,"timestamp":151224993290,"id":95,"parentId":52,"tags":{},"startTime":1778959197240,"traceId":"8d720ab1517efe94"},{"name":"check-page","duration":718027,"timestamp":151224974604,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778959197221,"traceId":"8d720ab1517efe94"},{"name":"static-check","duration":728002,"timestamp":151224964684,"id":19,"parentId":1,"tags":{},"startTime":1778959197211,"traceId":"8d720ab1517efe94"}]
2
- [{"name":"write-routes-manifest","duration":735,"timestamp":151225703898,"id":108,"parentId":1,"tags":{},"startTime":1778959197950,"traceId":"8d720ab1517efe94"},{"name":"load-dotenv","duration":46,"timestamp":151225716296,"id":111,"parentId":110,"tags":{},"startTime":1778959197963,"traceId":"8d720ab1517efe94"},{"name":"run-export-path-map","duration":492,"timestamp":151225719248,"id":112,"parentId":110,"tags":{},"startTime":1778959197966,"traceId":"8d720ab1517efe94"},{"name":"next-export","duration":612268,"timestamp":151225715076,"id":110,"parentId":1,"tags":{},"startTime":1778959197961,"traceId":"8d720ab1517efe94"},{"name":"move-exported-app-not-found-","duration":627,"timestamp":151226330497,"id":113,"parentId":109,"tags":{},"startTime":1778959198577,"traceId":"8d720ab1517efe94"},{"name":"move-exported-app-global-error-","duration":424,"timestamp":151226331246,"id":114,"parentId":109,"tags":{},"startTime":1778959198578,"traceId":"8d720ab1517efe94"},{"name":"static-generation","duration":625369,"timestamp":151225708778,"id":109,"parentId":1,"tags":{},"startTime":1778959197955,"traceId":"8d720ab1517efe94"},{"name":"write-routes-manifest","duration":451,"timestamp":151226334391,"id":115,"parentId":1,"tags":{},"startTime":1778959198581,"traceId":"8d720ab1517efe94"},{"name":"print-tree-view","duration":4077,"timestamp":151226353291,"id":116,"parentId":1,"tags":{},"startTime":1778959198600,"traceId":"8d720ab1517efe94"},{"name":"write-route-bundle-stats","duration":11307,"timestamp":151226357397,"id":117,"parentId":1,"tags":{},"startTime":1778959198604,"traceId":"8d720ab1517efe94"},{"name":"telemetry-flush","duration":23585,"timestamp":151226368731,"id":118,"parentId":1,"tags":{},"startTime":1778959198615,"traceId":"8d720ab1517efe94"},{"name":"next-build","duration":16934711,"timestamp":151209457627,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778959181704,"traceId":"8d720ab1517efe94"}]
1
+ [{"name":"generate-buildid","duration":269,"timestamp":151735899635,"id":4,"parentId":1,"tags":{},"startTime":1778959708146,"traceId":"aa1c60eb5e0927e5"},{"name":"load-custom-routes","duration":637,"timestamp":151735900068,"id":5,"parentId":1,"tags":{},"startTime":1778959708146,"traceId":"aa1c60eb5e0927e5"},{"name":"create-dist-dir","duration":809,"timestamp":151735900750,"id":6,"parentId":1,"tags":{},"startTime":1778959708147,"traceId":"aa1c60eb5e0927e5"},{"name":"clean","duration":39651,"timestamp":151735902553,"id":7,"parentId":1,"tags":{},"startTime":1778959708149,"traceId":"aa1c60eb5e0927e5"},{"name":"discover-routes","duration":11714,"timestamp":151736032471,"id":8,"parentId":1,"tags":{},"startTime":1778959708279,"traceId":"aa1c60eb5e0927e5"},{"name":"create-root-mapping","duration":176,"timestamp":151736044280,"id":9,"parentId":1,"tags":{},"startTime":1778959708291,"traceId":"aa1c60eb5e0927e5"},{"name":"generate-route-types","duration":43295,"timestamp":151736048425,"id":10,"parentId":1,"tags":{},"startTime":1778959708295,"traceId":"aa1c60eb5e0927e5"},{"name":"public-dir-conflict-check","duration":162,"timestamp":151736091856,"id":11,"parentId":1,"tags":{},"startTime":1778959708338,"traceId":"aa1c60eb5e0927e5"},{"name":"generate-routes-manifest","duration":5166,"timestamp":151736092196,"id":12,"parentId":1,"tags":{},"startTime":1778959708338,"traceId":"aa1c60eb5e0927e5"},{"name":"run-turbopack","duration":5892936,"timestamp":151736103304,"id":14,"parentId":1,"tags":{},"startTime":1778959708350,"traceId":"aa1c60eb5e0927e5"},{"name":"turbopack-build-events","duration":73,"timestamp":151736401898,"id":15,"parentId":1,"tags":{},"startTime":1778959708648,"traceId":"aa1c60eb5e0927e5"},{"name":"run-typescript","duration":9204279,"timestamp":151742010118,"id":16,"parentId":1,"tags":{},"startTime":1778959714256,"traceId":"aa1c60eb5e0927e5"},{"name":"generate-required-server-files","duration":2126,"timestamp":151751215428,"id":18,"parentId":1,"tags":{},"startTime":1778959723462,"traceId":"aa1c60eb5e0927e5"},{"name":"check-static-error-page","duration":15128,"timestamp":151751415708,"id":20,"parentId":19,"tags":{},"startTime":1778959723662,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":401634,"timestamp":151751433750,"id":65,"parentId":22,"tags":{},"startTime":1778959723680,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":416572,"timestamp":151751418967,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778959723665,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":518822,"timestamp":151751434578,"id":71,"parentId":30,"tags":{},"startTime":1778959723681,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":530596,"timestamp":151751422901,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778959723669,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":538844,"timestamp":151751434646,"id":72,"parentId":32,"tags":{},"startTime":1778959723681,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":550223,"timestamp":151751423344,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778959723670,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":556305,"timestamp":151751434127,"id":69,"parentId":28,"tags":{},"startTime":1778959723680,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":567890,"timestamp":151751422621,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778959723669,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":561431,"timestamp":151751436638,"id":73,"parentId":33,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":574676,"timestamp":151751423471,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778959723670,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":564517,"timestamp":151751433851,"id":66,"parentId":25,"tags":{},"startTime":1778959723680,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":576203,"timestamp":151751422206,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778959723668,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":561971,"timestamp":151751436758,"id":74,"parentId":34,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":575213,"timestamp":151751423580,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778959723670,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":567328,"timestamp":151751436812,"id":75,"parentId":35,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":580494,"timestamp":151751423696,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778959723670,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":570798,"timestamp":151751436880,"id":78,"parentId":38,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":583150,"timestamp":151751424581,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778959723671,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":575387,"timestamp":151751436836,"id":76,"parentId":36,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":588044,"timestamp":151751424223,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778959723670,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":575517,"timestamp":151751436892,"id":79,"parentId":39,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":587751,"timestamp":151751424684,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778959723671,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":583417,"timestamp":151751436903,"id":80,"parentId":40,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":595574,"timestamp":151751424793,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778959723671,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":587189,"timestamp":151751436913,"id":81,"parentId":42,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":598976,"timestamp":151751425180,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778959723671,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":588799,"timestamp":151751436925,"id":82,"parentId":44,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":600175,"timestamp":151751425600,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778959723672,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":591673,"timestamp":151751436936,"id":83,"parentId":45,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":602922,"timestamp":151751425727,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778959723672,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":594659,"timestamp":151751436947,"id":84,"parentId":46,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":605798,"timestamp":151751425848,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778959723672,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":600857,"timestamp":151751436865,"id":77,"parentId":37,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":613345,"timestamp":151751424445,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778959723671,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":600971,"timestamp":151751436957,"id":85,"parentId":47,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":612000,"timestamp":151751425956,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778959723672,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":604198,"timestamp":151751433922,"id":67,"parentId":26,"tags":{},"startTime":1778959723680,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":615765,"timestamp":151751422385,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778959723669,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":606658,"timestamp":151751436990,"id":88,"parentId":50,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":617399,"timestamp":151751426288,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778959723673,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":609413,"timestamp":151751436968,"id":86,"parentId":48,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":620345,"timestamp":151751426073,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778959723672,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":615460,"timestamp":151751433468,"id":64,"parentId":21,"tags":{},"startTime":1778959723680,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":631606,"timestamp":151751417362,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778959723664,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":603718,"timestamp":151751445598,"id":90,"parentId":24,"tags":{},"startTime":1778959723692,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":629838,"timestamp":151751419515,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778959723666,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":612501,"timestamp":151751436979,"id":87,"parentId":49,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":623307,"timestamp":151751426197,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778959723672,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":608307,"timestamp":151751446756,"id":91,"parentId":31,"tags":{},"startTime":1778959723693,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":632055,"timestamp":151751423053,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778959723669,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":607137,"timestamp":151751451346,"id":93,"parentId":43,"tags":{},"startTime":1778959723698,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":633200,"timestamp":151751425324,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778959723672,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":629806,"timestamp":151751437026,"id":89,"parentId":51,"tags":{},"startTime":1778959723683,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":640498,"timestamp":151751426378,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778959723673,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":636315,"timestamp":151751434401,"id":70,"parentId":29,"tags":{},"startTime":1778959723681,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":648036,"timestamp":151751422743,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778959723669,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":656723,"timestamp":151751433990,"id":68,"parentId":27,"tags":{},"startTime":1778959723680,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":668289,"timestamp":151751422504,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778959723669,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":669644,"timestamp":151751447616,"id":92,"parentId":41,"tags":{},"startTime":1778959723694,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":692450,"timestamp":151751424887,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778959723671,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":663440,"timestamp":151751454087,"id":95,"parentId":52,"tags":{},"startTime":1778959723700,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":690778,"timestamp":151751426788,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778959723673,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":667988,"timestamp":151751454099,"id":96,"parentId":53,"tags":{},"startTime":1778959723700,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":695180,"timestamp":151751426959,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778959723673,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":672721,"timestamp":151751454257,"id":101,"parentId":59,"tags":{},"startTime":1778959723701,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":697543,"timestamp":151751429532,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778959723676,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":674366,"timestamp":151751454060,"id":94,"parentId":23,"tags":{},"startTime":1778959723700,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":709188,"timestamp":151751419282,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778959723666,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":676423,"timestamp":151751454109,"id":97,"parentId":54,"tags":{},"startTime":1778959723700,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":702692,"timestamp":151751427885,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778959723674,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":681035,"timestamp":151751454137,"id":100,"parentId":58,"tags":{},"startTime":1778959723700,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":705898,"timestamp":151751429312,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778959723676,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":681567,"timestamp":151751454292,"id":104,"parentId":63,"tags":{},"startTime":1778959723701,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":705340,"timestamp":151751430557,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778959723677,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":668101,"timestamp":151751469816,"id":105,"parentId":60,"tags":{},"startTime":1778959723716,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":708226,"timestamp":151751429728,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778959723676,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":686188,"timestamp":151751454274,"id":102,"parentId":61,"tags":{},"startTime":1778959723701,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":710281,"timestamp":151751430220,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778959723676,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":687450,"timestamp":151751454283,"id":103,"parentId":62,"tags":{},"startTime":1778959723701,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":711397,"timestamp":151751430393,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778959723677,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":672351,"timestamp":151751478746,"id":106,"parentId":57,"tags":{},"startTime":1778959723725,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":722451,"timestamp":151751428689,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778959723675,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":712957,"timestamp":151751454128,"id":99,"parentId":56,"tags":{},"startTime":1778959723700,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":738810,"timestamp":151751428421,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778959723675,"traceId":"aa1c60eb5e0927e5"},{"name":"is-page-static","duration":714745,"timestamp":151751454118,"id":98,"parentId":55,"tags":{},"startTime":1778959723700,"traceId":"aa1c60eb5e0927e5"},{"name":"check-page","duration":740750,"timestamp":151751428149,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778959723674,"traceId":"aa1c60eb5e0927e5"},{"name":"static-check","duration":754469,"timestamp":151751414463,"id":19,"parentId":1,"tags":{},"startTime":1778959723661,"traceId":"aa1c60eb5e0927e5"}]
2
+ [{"name":"write-routes-manifest","duration":649,"timestamp":151752178082,"id":108,"parentId":1,"tags":{},"startTime":1778959724424,"traceId":"aa1c60eb5e0927e5"},{"name":"load-dotenv","duration":66,"timestamp":151752190779,"id":111,"parentId":110,"tags":{},"startTime":1778959724437,"traceId":"aa1c60eb5e0927e5"},{"name":"run-export-path-map","duration":583,"timestamp":151752193677,"id":112,"parentId":110,"tags":{},"startTime":1778959724440,"traceId":"aa1c60eb5e0927e5"},{"name":"next-export","duration":564696,"timestamp":151752189557,"id":110,"parentId":1,"tags":{},"startTime":1778959724436,"traceId":"aa1c60eb5e0927e5"},{"name":"move-exported-app-not-found-","duration":565,"timestamp":151752758841,"id":113,"parentId":109,"tags":{},"startTime":1778959725005,"traceId":"aa1c60eb5e0927e5"},{"name":"move-exported-app-global-error-","duration":394,"timestamp":151752759501,"id":114,"parentId":109,"tags":{},"startTime":1778959725006,"traceId":"aa1c60eb5e0927e5"},{"name":"static-generation","duration":579557,"timestamp":151752182890,"id":109,"parentId":1,"tags":{},"startTime":1778959724429,"traceId":"aa1c60eb5e0927e5"},{"name":"write-routes-manifest","duration":502,"timestamp":151752762709,"id":115,"parentId":1,"tags":{},"startTime":1778959725009,"traceId":"aa1c60eb5e0927e5"},{"name":"print-tree-view","duration":5896,"timestamp":151752772673,"id":116,"parentId":1,"tags":{},"startTime":1778959725019,"traceId":"aa1c60eb5e0927e5"},{"name":"write-route-bundle-stats","duration":18718,"timestamp":151752778623,"id":117,"parentId":1,"tags":{},"startTime":1778959725025,"traceId":"aa1c60eb5e0927e5"},{"name":"telemetry-flush","duration":22831,"timestamp":151752797367,"id":118,"parentId":1,"tags":{},"startTime":1778959725044,"traceId":"aa1c60eb5e0927e5"},{"name":"next-build","duration":16973189,"timestamp":151735847034,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778959708093,"traceId":"aa1c60eb5e0927e5"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5864622,"timestamp":151209713086,"id":14,"parentId":1,"tags":{},"startTime":1778959181959,"traceId":"8d720ab1517efe94"},{"name":"turbopack-build-events","duration":116,"timestamp":151210009716,"id":15,"parentId":1,"tags":{},"startTime":1778959182256,"traceId":"8d720ab1517efe94"},{"name":"run-typescript","duration":9212491,"timestamp":151215600224,"id":16,"parentId":1,"tags":{},"startTime":1778959187847,"traceId":"8d720ab1517efe94"},{"name":"static-check","duration":728002,"timestamp":151224964684,"id":19,"parentId":1,"tags":{},"startTime":1778959197211,"traceId":"8d720ab1517efe94"},{"name":"static-generation","duration":625369,"timestamp":151225708778,"id":109,"parentId":1,"tags":{},"startTime":1778959197955,"traceId":"8d720ab1517efe94"},{"name":"telemetry-flush","duration":23585,"timestamp":151226368731,"id":118,"parentId":1,"tags":{},"startTime":1778959198615,"traceId":"8d720ab1517efe94"},{"name":"next-build","duration":16934711,"timestamp":151209457627,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778959181704,"traceId":"8d720ab1517efe94"}]
1
+ [{"name":"run-turbopack","duration":5892936,"timestamp":151736103304,"id":14,"parentId":1,"tags":{},"startTime":1778959708350,"traceId":"aa1c60eb5e0927e5"},{"name":"turbopack-build-events","duration":73,"timestamp":151736401898,"id":15,"parentId":1,"tags":{},"startTime":1778959708648,"traceId":"aa1c60eb5e0927e5"},{"name":"run-typescript","duration":9204279,"timestamp":151742010118,"id":16,"parentId":1,"tags":{},"startTime":1778959714256,"traceId":"aa1c60eb5e0927e5"},{"name":"static-check","duration":754469,"timestamp":151751414463,"id":19,"parentId":1,"tags":{},"startTime":1778959723661,"traceId":"aa1c60eb5e0927e5"},{"name":"static-generation","duration":579557,"timestamp":151752182890,"id":109,"parentId":1,"tags":{},"startTime":1778959724429,"traceId":"aa1c60eb5e0927e5"},{"name":"telemetry-flush","duration":22831,"timestamp":151752797367,"id":118,"parentId":1,"tags":{},"startTime":1778959725044,"traceId":"aa1c60eb5e0927e5"},{"name":"next-build","duration":16973189,"timestamp":151735847034,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778959708093,"traceId":"aa1c60eb5e0927e5"}]
@@ -4471,13 +4471,34 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4471
4471
  // synchronised per-edge animation set.
4472
4472
  const stagger = (index * 0.37) % duration;
4473
4473
  // Round 10 / Loop: freshness fade. An edge that fired ≤30s ago
4474
- // stays at full intensity; over 5 minutes it decays to ~35%.
4475
- // Surfaces "what's happening now" vs background chatter without
4476
- // hiding old flow entirely (some context still useful). `now`
4477
- // captured at useMemo-recompute time (every 5s message refresh)
4478
- // — accuracy is within the poll interval, plenty.
4474
+ // stays at full intensity; over 5 minutes it decays to a
4475
+ // floor. Surfaces "what's happening now" vs background
4476
+ // chatter without hiding old flow entirely (some context
4477
+ // still useful). `now` captured at useMemo-recompute time
4478
+ // (every 5s message refresh) — accuracy is within the poll
4479
+ // interval, plenty.
4480
+ //
4481
+ // Round 406 / Loop: edge freshness fade floor 0.35 → 0.40.
4482
+ // Stale-state legibility lift family (6th anchor) — pre-
4483
+ // R406 edges older than 5 minutes faded to α=0.35 (a 65 %
4484
+ // dim against full intensity). The decay rate is the same
4485
+ // 1 - ageMs/300s curve; only the FLOOR shifts. Sibling
4486
+ // treatment to:
4487
+ // R317 subordinate-text gray-500 → gray-400
4488
+ // R358 freshness ramp floor 0.25 → 0.30
4489
+ // R372 minimap offline-dot opacity 0.5 → 0.6
4490
+ // R404 hub-halo cyber trough 0.08 → 0.10
4491
+ // R405 hub-halo light trough 0.32 → 0.34
4492
+ // R406 edge freshness floor 0.35 → 0.40 (this round)
4493
+ // Edges past 5min now sit at 40% intensity instead of 35%
4494
+ // — they still recede against fresh edges but read
4495
+ // legibly enough to convey "this conversation existed".
4496
+ // ageMs threshold for the 5-minute decay unchanged; the
4497
+ // decay curve shape (linear) unchanged. The visual delta
4498
+ // is most pronounced on edges between 5-60 minutes old —
4499
+ // where the floor was binding pre-R406.
4479
4500
  const ageMs = link.last_at ? Math.max(0, Date.now() - Date.parse(link.last_at)) : 0;
4480
- const fresh = Math.max(0.35, 1 - ageMs / (5 * 60 * 1000));
4501
+ const fresh = Math.max(0.40, 1 - ageMs / (5 * 60 * 1000));
4481
4502
  // Round 16 arrow-tier binning — keep `topo-arrow` as the
4482
4503
  // medium tier id so the legend swatch picks it up unchanged.
4483
4504
  const arrowId = link.count <= 2 ? 'topo-arrow-s'
@@ -6171,12 +6192,43 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6171
6192
  parent stays for status flips. data-node-halo-
6172
6193
  breath-offset surfaces the chosen offset for
6173
6194
  test introspection. */}
6195
+ {/* Round 407 / Loop: offline node halo opacity lift —
6196
+ cyber 0.25 → 0.30 and light 0.4 → 0.45. Pre-R407
6197
+ offline node halos faded to α=0.25 cyber (75 %
6198
+ dim) / α=0.4 light. On the dark canvas the 0.25
6199
+ halo read as "nearly gone" — exactly the
6200
+ legibility floor R404/R405 just lifted on the
6201
+ hub-halo and R372 lifted on minimap offline dots.
6202
+ R407 closes the same family at the per-node halo
6203
+ surface: +0.05 lift on both themes so offline
6204
+ anchors stay legibly present without crossing into
6205
+ "could be online" territory (online cyber 0.65 /
6206
+ light 0.85 unchanged — the 0.30/0.65 cyber ratio
6207
+ still gives 2.17× contrast for online/offline).
6208
+ Stale-state legibility lift family (7 anchors now):
6209
+ R317 subordinate-text gray-500 → gray-400
6210
+ R358 freshness floor 0.25 → 0.30
6211
+ R372 minimap offline-dot 0.5 → 0.6
6212
+ R404 hub-halo cyber trough 0.08 → 0.10
6213
+ R405 hub-halo light trough 0.32 → 0.34
6214
+ R406 edge freshness floor 0.35 → 0.40
6215
+ R407 node halo offline opacity (this round)
6216
+ cyber 0.25 → 0.30
6217
+ light 0.4 → 0.45
6218
+ R278 retired-breath gate + R12 status.halo color
6219
+ + R226 phase stagger code-path preserved (the
6220
+ breath stays disabled per Vincent's R278 ask;
6221
+ only the BASE opacity floor shifts here). transi-
6222
+ tion list ('fill,opacity' 300ms ease-out) unchanged.
6223
+ data-node-halo-offline-opacity attr exposes the
6224
+ resolved value for tests. */}
6174
6225
  <circle
6175
6226
  cx={pos.x}
6176
6227
  cy={pos.y}
6177
6228
  r={radius + 8}
6178
6229
  fill={status.halo}
6179
- opacity={isOnline ? (isLight ? 0.85 : 0.65) : (isLight ? 0.4 : 0.25)}
6230
+ opacity={isOnline ? (isLight ? 0.85 : 0.65) : (isLight ? 0.45 : 0.30)}
6231
+ data-node-halo-offline-opacity={isOnline ? undefined : (isLight ? 0.45 : 0.30)}
6180
6232
  className="transition-[fill,opacity] duration-300 ease-out"
6181
6233
  data-node-halo-breath={!reducedMotion && session.status === 'working' ? 'on' : 'off'}
6182
6234
  data-node-halo-breath-offset={
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.66",
3
+ "version": "0.5.1-preview.68",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,99 @@
1
+ /* Round 406 verification: edge freshness fade floor 0.35 → 0.40.
2
+ * Stale-state legibility lift family (6th anchor) — stale edges
3
+ * (>5min) now sit at 40% intensity instead of 35%. The decay
4
+ * curve shape (linear 1 - ageMs/300s) unchanged.
5
+ *
6
+ * Contract:
7
+ * - Source-file verification of `Math.max(0.40, 1 - ageMs / (5 * 60 * 1000))`
8
+ * - DOM probe: seed a STALE edge (ageMs > 5min) so fresh hits the
9
+ * floor; assert the visible flow path's opacity reflects the
10
+ * lifted floor (computed as 0.40 × edge_opacity_mul × base).
11
+ * - Compare against pre-R406 expectation (0.35 floor): the lifted
12
+ * floor produces ~14.3 % higher edge opacity on stale edges.
13
+ */
14
+ import { chromium } from 'playwright';
15
+ import { readFileSync } from 'node:fs';
16
+
17
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
18
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
19
+ // 10 minutes ago — well past the 5-min decay window; freshness hits floor.
20
+ const stale = new Date(Date.now() - 10 * 60 * 1000).toISOString();
21
+
22
+ const browser = await chromium.launch({ headless: true });
23
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
24
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
25
+ await ctx.addInitScript(() => {
26
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
27
+ });
28
+ await ctx.route('**/api/hub/status*', async (route) => {
29
+ const r = await route.fetch();
30
+ const b = await r.json();
31
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
32
+ const mk = (alias) => ({
33
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
34
+ network_id: nid, project_dir: null,
35
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
36
+ });
37
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('alpha'), mk('beta'), mk('gamma') ] } });
38
+ });
39
+ // Seed a stale flow link 10 minutes ago — past the 5-min decay so floor binds.
40
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({
41
+ json: { messages: [
42
+ { id: 'm1', from_alias: 'alpha', to_alias: 'beta', content: 'old', created_at: stale, network_id: 'default' },
43
+ ] },
44
+ }));
45
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
46
+
47
+ const page = await ctx.newPage();
48
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
49
+ await page.waitForSelector('[data-edge-visible]', { timeout: 15000 });
50
+ await page.waitForTimeout(600);
51
+
52
+ const probe = await page.evaluate(() => {
53
+ const edge = document.querySelector('[data-edge-visible]');
54
+ if (!edge) return null;
55
+ return {
56
+ opacityAttr: edge.getAttribute('opacity'),
57
+ edgeKey: edge.getAttribute('data-edge-visible'),
58
+ };
59
+ });
60
+
61
+ const fileText = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
62
+ const sourceHasFloor040 = /Math\.max\(0\.40, 1 - ageMs/.test(fileText);
63
+ const sourceLacksFloor035 = !/Math\.max\(0\.35, 1 - ageMs/.test(fileText);
64
+
65
+ await browser.close();
66
+
67
+ // Pre-R406 expected: (0.28 cyber base) × 0.35 floor × 1 mul = 0.098
68
+ // Post-R406 expected: (0.28 cyber base) × 0.40 floor × 1 mul = 0.112
69
+ // On the visible flow path the wire is:
70
+ // opacity = Math.min(1, (isLight ? 0.22 : 0.28) * fresh * edgeOpacityMul)
71
+ // For an unhovered edge in a fresh sessions context (no other hover/active):
72
+ // edgeOpacityMul = !hoveredAlias && !activeGroup ? (hoveredActiveLinks ? 1.5 : 1) : 0.35
73
+ // = 1 in this probe → opacity ≈ 0.112 post-R406
74
+ // Browser may serialize this as "0.112" or "0.11" — accept either with
75
+ // a tolerance probe.
76
+ const opacityNum = probe ? parseFloat(probe.opacityAttr || '0') : 0;
77
+ const expectedPost = 0.28 * 0.40 * 1; // 0.112
78
+ const expectedPre = 0.28 * 0.35 * 1; // 0.098
79
+ const distToPost = Math.abs(opacityNum - expectedPost);
80
+ const distToPre = Math.abs(opacityNum - expectedPre);
81
+
82
+ const results = {
83
+ // Edge mounted from seeded stale flow
84
+ edge_mounted: !!probe,
85
+ edge_key_present: !!probe?.edgeKey,
86
+ // Post-R406 opacity is CLOSER to 0.112 than 0.098
87
+ opacity_close_to_post_r406: distToPost < 0.01,
88
+ // Opacity is FURTHER from the pre-R406 0.098 baseline
89
+ opacity_not_pre_r406: distToPre > distToPost,
90
+ // Source-file canonical wire
91
+ source_floor_040: sourceHasFloor040,
92
+ source_no_floor_035: sourceLacksFloor035,
93
+ };
94
+ const ok = Object.values(results).every(Boolean);
95
+ console.log(`${ok ? '✅' : '❌'} edge freshness floor 0.35 → 0.40:`, JSON.stringify(results),
96
+ '\n probe:', probe,
97
+ '\n opacityNum:', opacityNum, '/ expectedPost:', expectedPost, '/ distToPost:', distToPost.toFixed(4),
98
+ '\n expectedPre:', expectedPre, '/ distToPre:', distToPre.toFixed(4));
99
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,87 @@
1
+ /* Round 407 verification: node halo offline opacity lift — cyber
2
+ * 0.25 → 0.30 and light 0.4 → 0.45. Probes both themes via two
3
+ * browser contexts with a single offline (ghost) session.
4
+ *
5
+ * Contract:
6
+ * - Online node (status: idle): opacity '0.65' cyber / '0.85' light
7
+ * (unchanged by R407 — invariant probe)
8
+ * - Offline node (status: offline + stale last_seen_at):
9
+ * * cyber: opacity attr === '0.3'
10
+ * * light: opacity attr === '0.45'
11
+ * * data-node-halo-offline-opacity === '0.3' / '0.45'
12
+ * - Source-file verification: the conditional
13
+ * `(isLight ? 0.45 : 0.30)` is present.
14
+ */
15
+ import { chromium } from 'playwright';
16
+ import { readFileSync } from 'node:fs';
17
+
18
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
19
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
20
+ const stale = new Date(Date.now() - 30 * 60 * 1000).toISOString();
21
+
22
+ async function probeTheme(theme) {
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((t) => {
27
+ try { localStorage.setItem('anet-theme', t); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
28
+ }, theme);
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
+ await route.fulfill({ response: r, json: { ...b, sessions: [
34
+ { alias: 'alpha', status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli', network_id: nid, project_dir: null, created_at: fresh, updated_at: fresh, last_seen_at: fresh },
35
+ { alias: 'ghost', status: 'offline', model: 'claude-opus-4', runtime: 'claude-code-cli', network_id: nid, project_dir: null, created_at: stale, updated_at: stale, last_seen_at: stale },
36
+ ] } });
37
+ });
38
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
39
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
40
+ const page = await ctx.newPage();
41
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
42
+ await page.waitForSelector('g[data-node]', { timeout: 15000 });
43
+ await page.waitForTimeout(400);
44
+ const probe = await page.evaluate(() => {
45
+ const nodes = Array.from(document.querySelectorAll('g[data-node]'));
46
+ const read = (alias) => {
47
+ const node = nodes.find((n) => n.getAttribute('data-node') === alias);
48
+ if (!node) return null;
49
+ const halo = node.querySelector('[data-node-halo-breath]');
50
+ return halo ? {
51
+ opacityAttr: halo.getAttribute('opacity'),
52
+ offlineData: halo.getAttribute('data-node-halo-offline-opacity'),
53
+ } : null;
54
+ };
55
+ return {
56
+ online: read('alpha'),
57
+ offline: read('ghost'),
58
+ };
59
+ });
60
+ await browser.close();
61
+ return probe;
62
+ }
63
+
64
+ const cyber = await probeTheme('cyber');
65
+ const light = await probeTheme('light');
66
+
67
+ const fileText = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
68
+ const sourceHasOfflineLift = /isOnline\s*\?\s*\(isLight\s*\?\s*0\.85\s*:\s*0\.65\)\s*:\s*\(isLight\s*\?\s*0\.45\s*:\s*0\.30\)/.test(fileText);
69
+
70
+ const results = {
71
+ // Online (R407 doesn't touch online — invariant)
72
+ cyber_online_065: cyber?.online?.opacityAttr === '0.65',
73
+ light_online_085: light?.online?.opacityAttr === '0.85',
74
+ cyber_online_no_offline_attr: cyber?.online?.offlineData === null || cyber?.online?.offlineData === undefined,
75
+ // Offline (R407 lift)
76
+ cyber_offline_0_3: cyber?.offline?.opacityAttr === '0.3',
77
+ cyber_offline_data_0_3: cyber?.offline?.offlineData === '0.3',
78
+ light_offline_0_45: light?.offline?.opacityAttr === '0.45',
79
+ light_offline_data_0_45: light?.offline?.offlineData === '0.45',
80
+ // Source-file verification
81
+ source_offline_lift: sourceHasOfflineLift,
82
+ };
83
+ const ok = Object.values(results).every(Boolean);
84
+ console.log(`${ok ? '✅' : '❌'} node halo offline opacity lift:`, JSON.stringify(results),
85
+ '\n cyber:', cyber,
86
+ '\n light:', light);
87
+ process.exit(ok ? 0 : 1);