@sleep2agi/agent-network-dashboard 0.4.6-preview.283 → 0.4.6-preview.285

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 (143) 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 +1 -1
  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/{0770ctmo-jd~3.js → 00-nc7g-hqsat.js} +3 -3
  130. package/.next/static/chunks/{13ku0uxsx2o6i.js → 06bp-k~o~6spf.js} +1 -1
  131. package/.next/static/chunks/{12ih-cxmgr09g.js → 07z52_2x.wi84.js} +1 -1
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +65 -17
  135. package/package.json +1 -1
  136. package/scripts/topo-legend-compress-test.mjs +107 -0
  137. package/scripts/topo-working-halo-breath-retired-test.mjs +99 -0
  138. package/scripts/topo-halo-breath-ease-test.mjs +0 -92
  139. package/scripts/topo-halo-breath-stagger-test.mjs +0 -89
  140. package/scripts/topo-working-halo-breath-test.mjs +0 -86
  141. /package/.next/static/{gPw1YGsDb6psvirUWKGfQ → u9Cwn8Wi8dRb7UmkteBWa}/_buildManifest.js +0 -0
  142. /package/.next/static/{gPw1YGsDb6psvirUWKGfQ → u9Cwn8Wi8dRb7UmkteBWa}/_clientMiddlewareManifest.js +0 -0
  143. /package/.next/static/{gPw1YGsDb6psvirUWKGfQ → u9Cwn8Wi8dRb7UmkteBWa}/_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.4.6-preview.283"],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.4.6-preview.285"],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.4.6-preview.283"],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.4.6-preview.285"],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":368,"timestamp":103457171728,"id":4,"parentId":1,"tags":{},"startTime":1778911429418,"traceId":"a352f1ba0c3857a9"},{"name":"load-custom-routes","duration":522,"timestamp":103457172293,"id":5,"parentId":1,"tags":{},"startTime":1778911429419,"traceId":"a352f1ba0c3857a9"},{"name":"create-dist-dir","duration":805,"timestamp":103457172862,"id":6,"parentId":1,"tags":{},"startTime":1778911429419,"traceId":"a352f1ba0c3857a9"},{"name":"clean","duration":31761,"timestamp":103457174494,"id":7,"parentId":1,"tags":{},"startTime":1778911429421,"traceId":"a352f1ba0c3857a9"},{"name":"discover-routes","duration":9694,"timestamp":103457282085,"id":8,"parentId":1,"tags":{},"startTime":1778911429528,"traceId":"a352f1ba0c3857a9"},{"name":"create-root-mapping","duration":119,"timestamp":103457291834,"id":9,"parentId":1,"tags":{},"startTime":1778911429538,"traceId":"a352f1ba0c3857a9"},{"name":"generate-route-types","duration":42115,"timestamp":103457294307,"id":10,"parentId":1,"tags":{},"startTime":1778911429541,"traceId":"a352f1ba0c3857a9"},{"name":"public-dir-conflict-check","duration":98,"timestamp":103457336516,"id":11,"parentId":1,"tags":{},"startTime":1778911429583,"traceId":"a352f1ba0c3857a9"},{"name":"generate-routes-manifest","duration":4983,"timestamp":103457336737,"id":12,"parentId":1,"tags":{},"startTime":1778911429583,"traceId":"a352f1ba0c3857a9"},{"name":"run-turbopack","duration":5656644,"timestamp":103457347501,"id":14,"parentId":1,"tags":{},"startTime":1778911429594,"traceId":"a352f1ba0c3857a9"},{"name":"turbopack-build-events","duration":119,"timestamp":103457634819,"id":15,"parentId":1,"tags":{},"startTime":1778911429881,"traceId":"a352f1ba0c3857a9"},{"name":"run-typescript","duration":9334696,"timestamp":103463017041,"id":16,"parentId":1,"tags":{},"startTime":1778911435263,"traceId":"a352f1ba0c3857a9"},{"name":"generate-required-server-files","duration":2254,"timestamp":103472352862,"id":18,"parentId":1,"tags":{},"startTime":1778911444599,"traceId":"a352f1ba0c3857a9"},{"name":"check-static-error-page","duration":11205,"timestamp":103472537981,"id":20,"parentId":19,"tags":{},"startTime":1778911444784,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":430248,"timestamp":103472551615,"id":63,"parentId":22,"tags":{},"startTime":1778911444798,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":441646,"timestamp":103472540430,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778911444787,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":548836,"timestamp":103472552196,"id":67,"parentId":28,"tags":{},"startTime":1778911444798,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":557851,"timestamp":103472543331,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":551910,"timestamp":103472551255,"id":62,"parentId":21,"tags":{},"startTime":1778911444798,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":564024,"timestamp":103472539198,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778911444785,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":554025,"timestamp":103472552630,"id":70,"parentId":32,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":562828,"timestamp":103472543884,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":558928,"timestamp":103472552463,"id":69,"parentId":30,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":567910,"timestamp":103472543549,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":581047,"timestamp":103472551946,"id":66,"parentId":27,"tags":{},"startTime":1778911444798,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":589845,"timestamp":103472543245,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":584054,"timestamp":103472552760,"id":72,"parentId":34,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":592782,"timestamp":103472544102,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":588752,"timestamp":103472552884,"id":74,"parentId":36,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":597180,"timestamp":103472544514,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":589167,"timestamp":103472552788,"id":73,"parentId":35,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":597833,"timestamp":103472544188,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":596991,"timestamp":103472551736,"id":64,"parentId":25,"tags":{},"startTime":1778911444798,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":605758,"timestamp":103472543025,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778911444789,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":599373,"timestamp":103472551835,"id":65,"parentId":26,"tags":{},"startTime":1778911444798,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":608093,"timestamp":103472543162,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778911444789,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":613278,"timestamp":103472552924,"id":75,"parentId":37,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":621645,"timestamp":103472544626,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":614628,"timestamp":103472552947,"id":77,"parentId":39,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":622857,"timestamp":103472544775,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":621426,"timestamp":103472552990,"id":81,"parentId":43,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":629368,"timestamp":103472545101,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":621648,"timestamp":103472552981,"id":80,"parentId":42,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":629659,"timestamp":103472544997,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":623966,"timestamp":103472552938,"id":76,"parentId":38,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":632237,"timestamp":103472544716,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":624794,"timestamp":103472552341,"id":68,"parentId":29,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":633770,"timestamp":103472543406,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":624446,"timestamp":103472552957,"id":78,"parentId":40,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":632629,"timestamp":103472544850,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":626396,"timestamp":103472552999,"id":82,"parentId":44,"tags":{},"startTime":1778911444803,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":634269,"timestamp":103472545163,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":624836,"timestamp":103472556488,"id":83,"parentId":45,"tags":{},"startTime":1778911444803,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":636151,"timestamp":103472545228,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778911444792,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":625242,"timestamp":103472558090,"id":86,"parentId":48,"tags":{},"startTime":1778911444804,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":637936,"timestamp":103472545443,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778911444792,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":621219,"timestamp":103472565578,"id":88,"parentId":24,"tags":{},"startTime":1778911444812,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":645880,"timestamp":103472540968,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778911444787,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":623896,"timestamp":103472566731,"id":89,"parentId":31,"tags":{},"startTime":1778911444813,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":647000,"timestamp":103472543674,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":641474,"timestamp":103472558105,"id":87,"parentId":49,"tags":{},"startTime":1778911444804,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":654129,"timestamp":103472545508,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778911444792,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":650723,"timestamp":103472552970,"id":79,"parentId":41,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":658818,"timestamp":103472544926,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778911444791,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":647849,"timestamp":103472556511,"id":84,"parentId":46,"tags":{},"startTime":1778911444803,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":659112,"timestamp":103472545294,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778911444792,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":651850,"timestamp":103472552691,"id":71,"parentId":33,"tags":{},"startTime":1778911444799,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":660592,"timestamp":103472543983,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778911444790,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":657300,"timestamp":103472558071,"id":85,"parentId":47,"tags":{},"startTime":1778911444804,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":670049,"timestamp":103472545381,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778911444792,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":645468,"timestamp":103472570139,"id":95,"parentId":54,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":667950,"timestamp":103472547697,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778911444794,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":653303,"timestamp":103472570165,"id":97,"parentId":57,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":675122,"timestamp":103472548404,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778911444795,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":661118,"timestamp":103472570174,"id":98,"parentId":59,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":682557,"timestamp":103472548787,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778911444795,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":676918,"timestamp":103472570192,"id":99,"parentId":60,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":698304,"timestamp":103472548879,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778911444795,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":677809,"timestamp":103472570061,"id":90,"parentId":23,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":707259,"timestamp":103472540703,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778911444787,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":684382,"timestamp":103472570211,"id":100,"parentId":61,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":705667,"timestamp":103472548984,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778911444795,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":680626,"timestamp":103472575954,"id":101,"parentId":58,"tags":{},"startTime":1778911444822,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":708107,"timestamp":103472548520,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778911444795,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":688341,"timestamp":103472570102,"id":92,"parentId":51,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":711186,"timestamp":103472547313,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778911444794,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":671981,"timestamp":103472588689,"id":102,"parentId":55,"tags":{},"startTime":1778911444835,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":712852,"timestamp":103472547853,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778911444794,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":694213,"timestamp":103472570088,"id":91,"parentId":50,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":717191,"timestamp":103472547153,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778911444793,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":694312,"timestamp":103472570130,"id":94,"parentId":53,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":716911,"timestamp":103472547562,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778911444794,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":704592,"timestamp":103472570116,"id":93,"parentId":52,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":727328,"timestamp":103472547428,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778911444794,"traceId":"a352f1ba0c3857a9"},{"name":"is-page-static","duration":708152,"timestamp":103472570151,"id":96,"parentId":56,"tags":{},"startTime":1778911444816,"traceId":"a352f1ba0c3857a9"},{"name":"check-page","duration":730090,"timestamp":103472548256,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778911444795,"traceId":"a352f1ba0c3857a9"},{"name":"static-check","duration":741178,"timestamp":103472537206,"id":19,"parentId":1,"tags":{},"startTime":1778911444783,"traceId":"a352f1ba0c3857a9"},{"name":"write-routes-manifest","duration":419,"timestamp":103473286663,"id":104,"parentId":1,"tags":{},"startTime":1778911445533,"traceId":"a352f1ba0c3857a9"},{"name":"load-dotenv","duration":57,"timestamp":103473298060,"id":107,"parentId":106,"tags":{},"startTime":1778911445544,"traceId":"a352f1ba0c3857a9"},{"name":"run-export-path-map","duration":588,"timestamp":103473302291,"id":108,"parentId":106,"tags":{},"startTime":1778911445549,"traceId":"a352f1ba0c3857a9"},{"name":"next-export","duration":567937,"timestamp":103473296483,"id":106,"parentId":1,"tags":{},"startTime":1778911445543,"traceId":"a352f1ba0c3857a9"}]
2
- [{"name":"move-exported-app-not-found-","duration":2098,"timestamp":103473868264,"id":109,"parentId":105,"tags":{},"startTime":1778911446115,"traceId":"a352f1ba0c3857a9"},{"name":"move-exported-app-global-error-","duration":486,"timestamp":103473870449,"id":110,"parentId":105,"tags":{},"startTime":1778911446117,"traceId":"a352f1ba0c3857a9"},{"name":"static-generation","duration":582127,"timestamp":103473290547,"id":105,"parentId":1,"tags":{},"startTime":1778911445537,"traceId":"a352f1ba0c3857a9"},{"name":"write-routes-manifest","duration":400,"timestamp":103473872825,"id":111,"parentId":1,"tags":{},"startTime":1778911446119,"traceId":"a352f1ba0c3857a9"},{"name":"print-tree-view","duration":4682,"timestamp":103473888725,"id":112,"parentId":1,"tags":{},"startTime":1778911446135,"traceId":"a352f1ba0c3857a9"},{"name":"write-route-bundle-stats","duration":12210,"timestamp":103473893439,"id":113,"parentId":1,"tags":{},"startTime":1778911446140,"traceId":"a352f1ba0c3857a9"},{"name":"telemetry-flush","duration":29717,"timestamp":103473905674,"id":114,"parentId":1,"tags":{},"startTime":1778911446152,"traceId":"a352f1ba0c3857a9"},{"name":"next-build","duration":16823323,"timestamp":103457112093,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778911429358,"traceId":"a352f1ba0c3857a9"}]
1
+ [{"name":"generate-buildid","duration":308,"timestamp":104219645062,"id":4,"parentId":1,"tags":{},"startTime":1778912191891,"traceId":"b61ad9ed1f07e53a"},{"name":"load-custom-routes","duration":538,"timestamp":104219645526,"id":5,"parentId":1,"tags":{},"startTime":1778912191892,"traceId":"b61ad9ed1f07e53a"},{"name":"create-dist-dir","duration":767,"timestamp":104219646112,"id":6,"parentId":1,"tags":{},"startTime":1778912191892,"traceId":"b61ad9ed1f07e53a"},{"name":"clean","duration":32382,"timestamp":104219647709,"id":7,"parentId":1,"tags":{},"startTime":1778912191894,"traceId":"b61ad9ed1f07e53a"},{"name":"discover-routes","duration":13729,"timestamp":104219761893,"id":8,"parentId":1,"tags":{},"startTime":1778912192008,"traceId":"b61ad9ed1f07e53a"},{"name":"create-root-mapping","duration":126,"timestamp":104219775681,"id":9,"parentId":1,"tags":{},"startTime":1778912192022,"traceId":"b61ad9ed1f07e53a"},{"name":"generate-route-types","duration":35441,"timestamp":104219778297,"id":10,"parentId":1,"tags":{},"startTime":1778912192025,"traceId":"b61ad9ed1f07e53a"},{"name":"public-dir-conflict-check","duration":116,"timestamp":104219813841,"id":11,"parentId":1,"tags":{},"startTime":1778912192060,"traceId":"b61ad9ed1f07e53a"},{"name":"generate-routes-manifest","duration":4756,"timestamp":104219814122,"id":12,"parentId":1,"tags":{},"startTime":1778912192060,"traceId":"b61ad9ed1f07e53a"},{"name":"run-turbopack","duration":5406962,"timestamp":104219825071,"id":14,"parentId":1,"tags":{},"startTime":1778912192071,"traceId":"b61ad9ed1f07e53a"},{"name":"turbopack-build-events","duration":151,"timestamp":104220108878,"id":15,"parentId":1,"tags":{},"startTime":1778912192355,"traceId":"b61ad9ed1f07e53a"},{"name":"run-typescript","duration":8984953,"timestamp":104225243546,"id":16,"parentId":1,"tags":{},"startTime":1778912197490,"traceId":"b61ad9ed1f07e53a"},{"name":"generate-required-server-files","duration":2547,"timestamp":104234229563,"id":18,"parentId":1,"tags":{},"startTime":1778912206476,"traceId":"b61ad9ed1f07e53a"},{"name":"check-static-error-page","duration":14566,"timestamp":104234396636,"id":20,"parentId":19,"tags":{},"startTime":1778912206643,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":420256,"timestamp":104234414637,"id":63,"parentId":22,"tags":{},"startTime":1778912206661,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":435232,"timestamp":104234399891,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778912206646,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":520602,"timestamp":104234414904,"id":65,"parentId":26,"tags":{},"startTime":1778912206661,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":532198,"timestamp":104234403416,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778912206650,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":520644,"timestamp":104234415346,"id":67,"parentId":28,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":532377,"timestamp":104234403683,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778912206650,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":535354,"timestamp":104234415920,"id":71,"parentId":33,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":546758,"timestamp":104234404576,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778912206651,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":535631,"timestamp":104234415847,"id":70,"parentId":32,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":547094,"timestamp":104234404415,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778912206651,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":536879,"timestamp":104234414779,"id":64,"parentId":25,"tags":{},"startTime":1778912206661,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":548488,"timestamp":104234403205,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778912206649,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":536311,"timestamp":104234415658,"id":69,"parentId":30,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":548073,"timestamp":104234403949,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778912206650,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":544686,"timestamp":104234416074,"id":73,"parentId":35,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":555974,"timestamp":104234404841,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778912206651,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":557165,"timestamp":104234414233,"id":62,"parentId":21,"tags":{},"startTime":1778912206661,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":573176,"timestamp":104234398287,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778912206645,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":558453,"timestamp":104234416041,"id":72,"parentId":34,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":569847,"timestamp":104234404703,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778912206651,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":560970,"timestamp":104234416251,"id":76,"parentId":38,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":571497,"timestamp":104234405777,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778912206652,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":566662,"timestamp":104234416293,"id":79,"parentId":41,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":576894,"timestamp":104234406142,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778912206652,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":567029,"timestamp":104234416199,"id":74,"parentId":36,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":577853,"timestamp":104234405405,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778912206652,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":570907,"timestamp":104234415060,"id":66,"parentId":27,"tags":{},"startTime":1778912206661,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":582469,"timestamp":104234403561,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778912206650,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":570884,"timestamp":104234416303,"id":80,"parentId":42,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":580973,"timestamp":104234406255,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":571547,"timestamp":104234416279,"id":78,"parentId":40,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":581838,"timestamp":104234406033,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778912206652,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":574449,"timestamp":104234415512,"id":68,"parentId":29,"tags":{},"startTime":1778912206662,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":586244,"timestamp":104234403790,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778912206650,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":576349,"timestamp":104234416344,"id":83,"parentId":45,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":586185,"timestamp":104234406560,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":576748,"timestamp":104234416359,"id":84,"parentId":46,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":586495,"timestamp":104234406662,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":579685,"timestamp":104234416233,"id":75,"parentId":37,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":590365,"timestamp":104234405614,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778912206652,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":579742,"timestamp":104234416391,"id":86,"parentId":48,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":589254,"timestamp":104234406913,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":579916,"timestamp":104234416375,"id":85,"parentId":47,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":589514,"timestamp":104234406801,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":584112,"timestamp":104234416316,"id":81,"parentId":43,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":594112,"timestamp":104234406358,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":576356,"timestamp":104234429141,"id":89,"parentId":31,"tags":{},"startTime":1778912206675,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":604956,"timestamp":104234404107,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778912206650,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":593062,"timestamp":104234416402,"id":87,"parentId":49,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":602449,"timestamp":104234407060,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":597693,"timestamp":104234416332,"id":82,"parentId":44,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":607604,"timestamp":104234406462,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778912206653,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":593831,"timestamp":104234423860,"id":88,"parentId":24,"tags":{},"startTime":1778912206670,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":617275,"timestamp":104234400457,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778912206647,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":640786,"timestamp":104234416265,"id":77,"parentId":39,"tags":{},"startTime":1778912206663,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":651242,"timestamp":104234405891,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778912206652,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":637603,"timestamp":104234431781,"id":96,"parentId":56,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":659978,"timestamp":104234409477,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778912206656,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":637972,"timestamp":104234431732,"id":93,"parentId":52,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":661855,"timestamp":104234407892,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778912206654,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":638803,"timestamp":104234431716,"id":92,"parentId":51,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":662871,"timestamp":104234407700,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778912206654,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":647271,"timestamp":104234431797,"id":97,"parentId":57,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":669380,"timestamp":104234409740,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778912206656,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":648767,"timestamp":104234431813,"id":98,"parentId":59,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":670148,"timestamp":104234410493,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778912206657,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":651008,"timestamp":104234431849,"id":100,"parentId":61,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":672051,"timestamp":104234410845,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778912206657,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":653475,"timestamp":104234431829,"id":99,"parentId":60,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":674687,"timestamp":104234410671,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778912206657,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":654877,"timestamp":104234431768,"id":95,"parentId":54,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":678227,"timestamp":104234408458,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778912206655,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":644808,"timestamp":104234443492,"id":101,"parentId":58,"tags":{},"startTime":1778912206690,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":678360,"timestamp":104234409984,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778912206656,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":657822,"timestamp":104234431748,"id":94,"parentId":53,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":681438,"timestamp":104234408177,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778912206654,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":636031,"timestamp":104234453667,"id":102,"parentId":55,"tags":{},"startTime":1778912206700,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":680960,"timestamp":104234408761,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778912206655,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":660877,"timestamp":104234431703,"id":91,"parentId":50,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":685115,"timestamp":104234407503,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778912206654,"traceId":"b61ad9ed1f07e53a"},{"name":"is-page-static","duration":662022,"timestamp":104234431668,"id":90,"parentId":23,"tags":{},"startTime":1778912206678,"traceId":"b61ad9ed1f07e53a"},{"name":"check-page","duration":693560,"timestamp":104234400211,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778912206646,"traceId":"b61ad9ed1f07e53a"},{"name":"static-check","duration":698184,"timestamp":104234395641,"id":19,"parentId":1,"tags":{},"startTime":1778912206642,"traceId":"b61ad9ed1f07e53a"},{"name":"write-routes-manifest","duration":498,"timestamp":104235100644,"id":104,"parentId":1,"tags":{},"startTime":1778912207347,"traceId":"b61ad9ed1f07e53a"},{"name":"load-dotenv","duration":50,"timestamp":104235113520,"id":107,"parentId":106,"tags":{},"startTime":1778912207360,"traceId":"b61ad9ed1f07e53a"},{"name":"run-export-path-map","duration":778,"timestamp":104235116965,"id":108,"parentId":106,"tags":{},"startTime":1778912207363,"traceId":"b61ad9ed1f07e53a"},{"name":"next-export","duration":573168,"timestamp":104235111649,"id":106,"parentId":1,"tags":{},"startTime":1778912207358,"traceId":"b61ad9ed1f07e53a"}]
2
+ [{"name":"move-exported-app-not-found-","duration":2138,"timestamp":104235688366,"id":109,"parentId":105,"tags":{},"startTime":1778912207935,"traceId":"b61ad9ed1f07e53a"},{"name":"move-exported-app-global-error-","duration":594,"timestamp":104235690589,"id":110,"parentId":105,"tags":{},"startTime":1778912207937,"traceId":"b61ad9ed1f07e53a"},{"name":"static-generation","duration":588300,"timestamp":104235104753,"id":105,"parentId":1,"tags":{},"startTime":1778912207351,"traceId":"b61ad9ed1f07e53a"},{"name":"write-routes-manifest","duration":344,"timestamp":104235693217,"id":111,"parentId":1,"tags":{},"startTime":1778912207939,"traceId":"b61ad9ed1f07e53a"},{"name":"print-tree-view","duration":4109,"timestamp":104235701348,"id":112,"parentId":1,"tags":{},"startTime":1778912207948,"traceId":"b61ad9ed1f07e53a"},{"name":"write-route-bundle-stats","duration":18779,"timestamp":104235705487,"id":113,"parentId":1,"tags":{},"startTime":1778912207952,"traceId":"b61ad9ed1f07e53a"},{"name":"telemetry-flush","duration":29408,"timestamp":104235724297,"id":114,"parentId":1,"tags":{},"startTime":1778912207971,"traceId":"b61ad9ed1f07e53a"},{"name":"next-build","duration":16161842,"timestamp":104219591890,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778912191838,"traceId":"b61ad9ed1f07e53a"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5656644,"timestamp":103457347501,"id":14,"parentId":1,"tags":{},"startTime":1778911429594,"traceId":"a352f1ba0c3857a9"},{"name":"turbopack-build-events","duration":119,"timestamp":103457634819,"id":15,"parentId":1,"tags":{},"startTime":1778911429881,"traceId":"a352f1ba0c3857a9"},{"name":"run-typescript","duration":9334696,"timestamp":103463017041,"id":16,"parentId":1,"tags":{},"startTime":1778911435263,"traceId":"a352f1ba0c3857a9"},{"name":"static-check","duration":741178,"timestamp":103472537206,"id":19,"parentId":1,"tags":{},"startTime":1778911444783,"traceId":"a352f1ba0c3857a9"},{"name":"static-generation","duration":582127,"timestamp":103473290547,"id":105,"parentId":1,"tags":{},"startTime":1778911445537,"traceId":"a352f1ba0c3857a9"},{"name":"telemetry-flush","duration":29717,"timestamp":103473905674,"id":114,"parentId":1,"tags":{},"startTime":1778911446152,"traceId":"a352f1ba0c3857a9"},{"name":"next-build","duration":16823323,"timestamp":103457112093,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778911429358,"traceId":"a352f1ba0c3857a9"}]
1
+ [{"name":"run-turbopack","duration":5406962,"timestamp":104219825071,"id":14,"parentId":1,"tags":{},"startTime":1778912192071,"traceId":"b61ad9ed1f07e53a"},{"name":"turbopack-build-events","duration":151,"timestamp":104220108878,"id":15,"parentId":1,"tags":{},"startTime":1778912192355,"traceId":"b61ad9ed1f07e53a"},{"name":"run-typescript","duration":8984953,"timestamp":104225243546,"id":16,"parentId":1,"tags":{},"startTime":1778912197490,"traceId":"b61ad9ed1f07e53a"},{"name":"static-check","duration":698184,"timestamp":104234395641,"id":19,"parentId":1,"tags":{},"startTime":1778912206642,"traceId":"b61ad9ed1f07e53a"},{"name":"static-generation","duration":588300,"timestamp":104235104753,"id":105,"parentId":1,"tags":{},"startTime":1778912207351,"traceId":"b61ad9ed1f07e53a"},{"name":"telemetry-flush","duration":29408,"timestamp":104235724297,"id":114,"parentId":1,"tags":{},"startTime":1778912207971,"traceId":"b61ad9ed1f07e53a"},{"name":"next-build","duration":16161842,"timestamp":104219591890,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778912191838,"traceId":"b61ad9ed1f07e53a"}]
@@ -4921,19 +4921,44 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4921
4921
  : undefined
4922
4922
  }
4923
4923
  >
4924
- {/* Round 244 / Loop: working halo breath joins the
4925
- R243 / R244 SMIL-ease-in-out family. R226's
4926
- golden-ratio per-node phase stagger stays in
4927
- place; R244 adds calcMode='spline' + keySplines
4928
- '0.42 0 0.58 1' ×2 so each halo's breath also
4929
- settles at its endpoints instead of constant-
4930
- velocity marching. The three breath surfaces
4931
- now share the same curve shape: hub grounding
4932
- halo (R84+R244) + active-node pulse (R243) +
4933
- working halo (R112+R226+R244). All breaths on
4934
- canvas now feel calm at the extremes, alive
4935
- through the middle. */}
4936
- {!reducedMotion && session.status === 'working' && (
4924
+ {/* Round 278 / Loop: per-node working halo breath
4925
+ (R112+R226+R244 family) RETIRED per Vincent
4926
+ 5214/5215-5217 simplification ask (减法 cut #4
4927
+ after R275 chip-row, R276 orbit, R277 legend).
4928
+
4929
+ The breath was: each working agent's halo pulses
4930
+ 0.73→0.92→0.73 (cyber 0.53→0.78→0.53) at 3 s
4931
+ cycle, R226-staggered per-node, R244-eased. For
4932
+ a 4-working fleet that's 4 simultaneous SMIL
4933
+ breaths competing with the hub-halo breath
4934
+ (R244 hub) for the "fleet busyness" visual
4935
+ signal.
4936
+
4937
+ The signal is info-redundant: the hub-halo
4938
+ breath ALREADY conveys "the network is alive
4939
+ and busy"; per-node halo breath duplicates it
4940
+ at 4× volume. Plus working nodes are ALREADY
4941
+ distinguished by their halo color (status.halo
4942
+ green/teal/slate via R12 trio) — the static
4943
+ halo carries identity, the moving breath was
4944
+ decorative motion on top.
4945
+
4946
+ R278 gates the SMIL animate with `false &&` so
4947
+ the code remains for rollback. Halo opacity
4948
+ stays at the BASE (non-breathing) values via
4949
+ the parent circle's `opacity` attr (0.85/0.65/
4950
+ 0.4/0.25 from R12 + isOnline gate). Working
4951
+ nodes still show green halos; they just don't
4952
+ pulse.
4953
+
4954
+ Net: -4 SMIL animations on canvas for typical
4955
+ 4-working fleet. Combined with R276 orbit
4956
+ retirement (-4) and the hub halo breath kept
4957
+ as the SOLE "fleet busyness" motion signal,
4958
+ the canvas reads quieter. R226 + R244 per-node
4959
+ stagger / ease constants are dead code post-
4960
+ R278 (acceptable — family retires together). */}
4961
+ {false && !reducedMotion && session.status === 'working' && (
4937
4962
  <animate
4938
4963
  attributeName="opacity"
4939
4964
  values={isLight ? '0.73;0.92;0.73' : '0.53;0.78;0.53'}
@@ -6277,7 +6302,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6277
6302
  (no snap on cyber↔light switch). Same 200ms cadence
6278
6303
  across the panel pair. */}
6279
6304
  <rect
6280
- x="0" y="0" width="224" height="104" rx="8"
6305
+ x="0" y="0" width="224" height="88" rx="8"
6281
6306
  fill={pal.legendBox.fill}
6282
6307
  stroke={pal.legendBox.stroke}
6283
6308
  opacity={isLight ? 0.97 : 0.92}
@@ -6330,8 +6355,25 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6330
6355
  // to clear the new header row. R57 panel rect grew 96 →
6331
6356
  // 104 to seat them.
6332
6357
  const rows = [
6358
+ /* Round 277 / Loop: legend panel compress 104 → 88 (matches
6359
+ recent-signal panel height post-R256) per Vincent
6360
+ 5214/5215-5217 simplification ask. Row stride drops
6361
+ 24 → 18: row 1 working anchored at y0=32 (unchanged so
6362
+ R271 hitbox-swatch-center test at y=21 still passes);
6363
+ row 2 idle y0=56→50 (-6); row 3 offline y0=80→68 (-12).
6364
+ Flow-arrow swatch path (line ~6607) tracks new offline
6365
+ cy from y=80 to y=68. Net: legend panel takes ~15%
6366
+ less vertical chrome, panel pair (recent-signal+
6367
+ legend) now share same height = symmetric corner
6368
+ pair. Tests still pass: R257/R266/R269/R274 probe
6369
+ x attrs, fill transitions, text content — none
6370
+ sensitive to y0 stride. R271 probes working row
6371
+ hitbox y=21 (row.y0-11 with row.y0=32), unchanged.
6372
+ Corner-to-center distance increases (panel ends
6373
+ higher, further from center) — geometric ring-clear
6374
+ improves slightly. */
6333
6375
  { key: 'working' as const, y0: 32, y1: 36, fill: isLight ? '#059669' : '#22c55e', label: 'working node', count: workingCount },
6334
- { key: 'idle' as const, y0: 56, y1: 60, fill: isLight ? '#0d9488' : '#2dd4bf', label: 'online idle', count: idleCount },
6376
+ { key: 'idle' as const, y0: 50, y1: 54, fill: isLight ? '#0d9488' : '#2dd4bf', label: 'online idle', count: idleCount },
6335
6377
  /* Round 269 / Loop: " / " → " · " delimiter unification.
6336
6378
  R138 swept the recent-signal row separators from
6337
6379
  ASCII " / " to typographic " · " (matching filter
@@ -6340,7 +6382,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6340
6382
  LAST hardcoded " / " holdover in TopoGraph. Same
6341
6383
  monospace cell width (no layout shift), completes
6342
6384
  the R138 delimiter sweep. */
6343
- { key: 'offline' as const, y0: 80, y1: 84, fill: isLight ? '#94a3b8' : '#6b7280', label: 'offline · no SSE', count: offlineNodes.length },
6385
+ { key: 'offline' as const, y0: 68, y1: 72, fill: isLight ? '#94a3b8' : '#6b7280', label: 'offline · no SSE', count: offlineNodes.length },
6344
6386
  ];
6345
6387
  return rows;
6346
6388
  })().map(row => {
@@ -6604,7 +6646,13 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
6604
6646
  {/* Round 254 / Loop: legend flow-arrow swatch stroke
6605
6647
  transition for theme toggle (cyber #67e8f9 ↔ light
6606
6648
  #10b981). Last theme-driven legend element snap. */}
6607
- <path d="M140,80 Q164,56 196,80" fill="none" stroke={pal.flowEdge} strokeWidth="3" markerEnd="url(#topo-arrow)" data-legend-flow-arrow style={{ pointerEvents: 'none', transition: 'stroke 200ms ease-out' }} />
6649
+ {/* Round 277 / Loop: flow-arrow path tracks new offline-row
6650
+ cy=68 after the legend panel compress (was 80 pre-R277).
6651
+ Endpoints follow the offline row to keep the swatch
6652
+ logically tied to the row it demonstrates; control point
6653
+ proportionally shifts so apex stays mid-arc between
6654
+ rows 2 and 3. */}
6655
+ <path d="M140,68 Q164,44 196,68" fill="none" stroke={pal.flowEdge} strokeWidth="3" markerEnd="url(#topo-arrow)" data-legend-flow-arrow style={{ pointerEvents: 'none', transition: 'stroke 200ms ease-out' }} />
6608
6656
  </g>
6609
6657
  </svg>
6610
6658
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.4.6-preview.283",
3
+ "version": "0.4.6-preview.285",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,107 @@
1
+ /* Round 277 verification: legend panel compress 104 → 88, matching the
2
+ * recent-signal panel's height post-R256. Row stride 24 → 18.
3
+ *
4
+ * Pre-R277:
5
+ * Panel: 224×104, rx=8
6
+ * Row 1 (working): y0=32, y1=36
7
+ * Row 2 (idle): y0=56, y1=60
8
+ * Row 3 (offline): y0=80, y1=84
9
+ * Flow-arrow: M140,80 Q164,56 196,80 (endpoints y=80)
10
+ *
11
+ * Post-R277:
12
+ * Panel: 224×88, rx=8
13
+ * Row 1 (working): y0=32, y1=36 (anchored — R271 hitbox y=21 invariant)
14
+ * Row 2 (idle): y0=50, y1=54 (-6)
15
+ * Row 3 (offline): y0=68, y1=72 (-12)
16
+ * Flow-arrow: M140,68 Q164,44 196,68 (tracks new offline cy)
17
+ *
18
+ * Net: legend panel takes ~15% less vertical chrome; panel pair
19
+ * (recent-signal 88 + legend 88) now share the same height. Third
20
+ * 减法 cut after R275 (FreshnessChip conditional) + R276 (orbit
21
+ * particles retired).
22
+ *
23
+ * Test scope:
24
+ * 1. Legend panel rect height === 88.
25
+ * 2. Recent-signal panel rect height === 88 (regression — R256 invariant).
26
+ * 3. Working row hitbox y === 21 (R271 invariant: row.y0=32 unchanged).
27
+ * 4. Flow-arrow path starts with "M140,68" (tracks new offline cy=68).
28
+ * 5. R275 freshness chip absent at fresh (regression).
29
+ * 6. R276 orbit particles absent (regression).
30
+ */
31
+ import { chromium } from 'playwright';
32
+ import { readFileSync } from 'node:fs';
33
+
34
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
35
+ const browser = await chromium.launch({ headless: true });
36
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
37
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
38
+ await ctx.addInitScript(() => {
39
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
40
+ });
41
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
42
+ await ctx.route('**/api/hub/status*', async (route) => {
43
+ const r = await route.fetch();
44
+ const b = await r.json();
45
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
46
+ const mk = (alias) => ({
47
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
48
+ network_id: nid, project_dir: null,
49
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
50
+ });
51
+ await route.fulfill({ response: r, json: { ...b, sessions: [
52
+ mk('alpha'), mk('beta'), mk('gamma'), mk('delta'),
53
+ ] } });
54
+ });
55
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
56
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
57
+
58
+ const page = await ctx.newPage();
59
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
60
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
61
+ await page.waitForSelector('[data-topo-panel="legend"]', { timeout: 10000 });
62
+ await page.waitForSelector('[data-topo-panel="recent"]', { timeout: 10000 });
63
+ await page.waitForSelector('[data-legend-status="working"] rect', { timeout: 10000 });
64
+ await page.waitForSelector('[data-legend-flow-arrow]', { timeout: 10000 });
65
+ await page.waitForTimeout(300);
66
+
67
+ // Hover working row to materialize the tinted hitbox rect for the
68
+ // y=21 invariant check (R271). Without hover the rect carries the
69
+ // same y attr but tint fills are transparent.
70
+ await page.locator('[data-legend-status="working"]').hover();
71
+ await page.waitForTimeout(150);
72
+
73
+ const probe = await page.evaluate(() => {
74
+ const legendG = document.querySelector('[data-topo-panel="legend"]');
75
+ const recentG = document.querySelector('[data-topo-panel="recent"]');
76
+ const workingRow = document.querySelector('[data-legend-status="working"]');
77
+ const workingHitbox = workingRow ? workingRow.querySelector('rect') : null;
78
+ const flowArrow = document.querySelector('[data-legend-flow-arrow]');
79
+ const freshnessChip = document.querySelector('[data-freshness-chip]');
80
+ const orbits = document.querySelectorAll('[data-topo-orbit-bucket]');
81
+ return {
82
+ legendHeight: legendG?.querySelector('rect')?.getAttribute('height') ?? null,
83
+ recentHeight: recentG?.querySelector('rect')?.getAttribute('height') ?? null,
84
+ workingHitboxY: workingHitbox ? +workingHitbox.getAttribute('y') : null,
85
+ flowArrowD: flowArrow ? flowArrow.getAttribute('d') : null,
86
+ freshnessPresent: freshnessChip !== null,
87
+ orbitCount: orbits.length,
88
+ };
89
+ });
90
+ await browser.close();
91
+
92
+ const results = {
93
+ legend_height_88: probe.legendHeight === '88',
94
+ recent_height_88_regression: probe.recentHeight === '88',
95
+ r271_working_hitbox_y_21: probe.workingHitboxY === 21,
96
+ flow_arrow_starts_at_y68: probe.flowArrowD === 'M140,68 Q164,44 196,68',
97
+ r275_freshness_absent: probe.freshnessPresent === false,
98
+ r276_orbit_absent: probe.orbitCount === 0,
99
+ };
100
+ const ok = Object.values(results).every(Boolean);
101
+ console.log(`${ok ? '✅' : '❌'} legend compress:`, JSON.stringify(results),
102
+ '\n legend height:', probe.legendHeight,
103
+ '\n recent height:', probe.recentHeight,
104
+ '\n working hitbox y:', probe.workingHitboxY,
105
+ '\n flow arrow d:', probe.flowArrowD,
106
+ '\n orbit count:', probe.orbitCount);
107
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,99 @@
1
+ /* Round 278 verification: working halo breath SMIL retired (R112 +
2
+ * R226 + R244 family) — 减法 cut #4.
3
+ *
4
+ * Pre-R278 each working node's halo <circle r=radius+8> contained a
5
+ * <animate attributeName="opacity" ...> child that pulsed
6
+ * 0.73→0.92→0.73 (cyber 0.53→0.78→0.53) at 3s cycle, R226-staggered
7
+ * per-node by (nodeIdx * 0.37) % 3, R244 spline-eased.
8
+ *
9
+ * For a 4-working fleet that's 4 simultaneous SMIL breaths competing
10
+ * with the hub-halo breath (R244 hub) for the "fleet busyness" visual
11
+ * signal. The signal is info-redundant: hub-halo breath already
12
+ * conveys "alive and busy"; per-node halo breath duplicates at 4×
13
+ * volume. Working nodes are also distinguished by their halo COLOR
14
+ * (R12 status trio green halo), so identity stays without motion.
15
+ *
16
+ * Post-R278 the SMIL animate is gated `false &&` — halo opacity stays
17
+ * at the base value via the parent circle's opacity attr (no breath).
18
+ * Working node halos visible but static.
19
+ *
20
+ * Test scope:
21
+ * 1. No `<animate>` child inside working node halos (the
22
+ * <circle r=radius+8 ...>). Probe by looking for animate inside
23
+ * circles tagged data-node-halo-breath='on'.
24
+ * 2. Halo circles still PRESENT (info preserved — just static).
25
+ * 3. R275 freshness chip absent at fresh (regression).
26
+ * 4. R276 orbit particles absent (regression).
27
+ * 5. R277 legend panel height === 88 (regression).
28
+ */
29
+ import { chromium } from 'playwright';
30
+ import { readFileSync } from 'node:fs';
31
+
32
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
33
+ const browser = await chromium.launch({ headless: true });
34
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
35
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
36
+ await ctx.addInitScript(() => {
37
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
38
+ });
39
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
40
+ await ctx.route('**/api/hub/status*', async (route) => {
41
+ const r = await route.fetch();
42
+ const b = await r.json();
43
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
44
+ const mk = (alias) => ({
45
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
46
+ network_id: nid, project_dir: null,
47
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
48
+ });
49
+ await route.fulfill({ response: r, json: { ...b, sessions: [
50
+ mk('alpha'), mk('beta'), mk('gamma'), mk('delta'),
51
+ ] } });
52
+ });
53
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
54
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
55
+
56
+ const page = await ctx.newPage();
57
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
58
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
59
+ await page.waitForSelector('[data-node-halo-breath]', { timeout: 10000 });
60
+ await page.waitForSelector('[data-topo-panel="legend"]', { timeout: 10000 });
61
+ await page.waitForTimeout(300);
62
+
63
+ const probe = await page.evaluate(() => {
64
+ // Working node halos — they should still exist (info preserved)
65
+ // but should NOT contain <animate> children (SMIL retired).
66
+ const halos = document.querySelectorAll('[data-node-halo-breath="on"]');
67
+ let animateChildCount = 0;
68
+ halos.forEach((h) => {
69
+ animateChildCount += h.querySelectorAll('animate').length;
70
+ });
71
+ const freshnessChip = document.querySelector('[data-freshness-chip]');
72
+ const orbits = document.querySelectorAll('[data-topo-orbit-bucket]');
73
+ const legendG = document.querySelector('[data-topo-panel="legend"]');
74
+ const legendH = legendG?.querySelector('rect')?.getAttribute('height') ?? null;
75
+ return {
76
+ haloCount: halos.length,
77
+ haloAnimateCount: animateChildCount,
78
+ freshnessPresent: freshnessChip !== null,
79
+ orbitCount: orbits.length,
80
+ legendHeight: legendH,
81
+ };
82
+ });
83
+ await browser.close();
84
+
85
+ const results = {
86
+ halos_still_present: probe.haloCount >= 4,
87
+ halo_animate_count_zero: probe.haloAnimateCount === 0,
88
+ r275_freshness_absent: probe.freshnessPresent === false,
89
+ r276_orbit_absent: probe.orbitCount === 0,
90
+ r277_legend_height_88: probe.legendHeight === '88',
91
+ };
92
+ const ok = Object.values(results).every(Boolean);
93
+ console.log(`${ok ? '✅' : '❌'} working halo breath retired:`, JSON.stringify(results),
94
+ '\n halo count (expect >=4):', probe.haloCount,
95
+ '\n halo <animate> children (expect 0):', probe.haloAnimateCount,
96
+ '\n freshness absent:', !probe.freshnessPresent,
97
+ '\n orbit count (expect 0):', probe.orbitCount,
98
+ '\n legend height:', probe.legendHeight);
99
+ process.exit(ok ? 0 : 1);