@sleep2agi/agent-network-dashboard 0.5.3-preview.196 → 0.5.3-preview.198

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 (156) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +5 -5
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  138. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  139. package/.next/server/middleware-build-manifest.js +3 -3
  140. package/.next/server/pages/404.html +2 -2
  141. package/.next/server/pages/500.html +1 -1
  142. package/.next/static/chunks/{0zz-xrdh5qgdl.js → 09nz4.b.~x~mh.js} +1 -1
  143. package/.next/static/chunks/{0-8bxlg9uqt.w.css → 0dok1ng_f~de2.css} +1 -1
  144. package/.next/static/chunks/{03oul6io3.6au.js → 0g18w3fa_s-tz.js} +1 -1
  145. package/.next/static/chunks/{02p.0x3ayy60d.js → 0u26k1lc.nuh5.js} +1 -1
  146. package/.next/static/chunks/{0ho61ngs-c5x0.js → 0y8s3e_wg4tay.js} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +16 -3
  150. package/app/globals.css +57 -0
  151. package/package.json +1 -1
  152. package/scripts/topo-brand-logo-halo-layers-test.mjs +85 -0
  153. package/scripts/topo-section-title-halo-layers-test.mjs +88 -0
  154. /package/.next/static/{IrvNkH1SDtH1tjF9m3acI → 07ewHJZWS7g6jCUKTAGL0}/_buildManifest.js +0 -0
  155. /package/.next/static/{IrvNkH1SDtH1tjF9m3acI → 07ewHJZWS7g6jCUKTAGL0}/_clientMiddlewareManifest.js +0 -0
  156. /package/.next/static/{IrvNkH1SDtH1tjF9m3acI → 07ewHJZWS7g6jCUKTAGL0}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.196"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.198"],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 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.196"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.198"],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]})]})]})]})}])}]);
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":263,"timestamp":261577542705,"id":4,"parentId":1,"tags":{},"startTime":1779069549789,"traceId":"e14a09f076c0e4a6"},{"name":"load-custom-routes","duration":443,"timestamp":261577543122,"id":5,"parentId":1,"tags":{},"startTime":1779069549789,"traceId":"e14a09f076c0e4a6"},{"name":"create-dist-dir","duration":664,"timestamp":261577543602,"id":6,"parentId":1,"tags":{},"startTime":1779069549790,"traceId":"e14a09f076c0e4a6"},{"name":"clean","duration":35807,"timestamp":261577544905,"id":7,"parentId":1,"tags":{},"startTime":1779069549791,"traceId":"e14a09f076c0e4a6"},{"name":"discover-routes","duration":8741,"timestamp":261577664759,"id":8,"parentId":1,"tags":{},"startTime":1779069549911,"traceId":"e14a09f076c0e4a6"},{"name":"create-root-mapping","duration":98,"timestamp":261577673555,"id":9,"parentId":1,"tags":{},"startTime":1779069549920,"traceId":"e14a09f076c0e4a6"},{"name":"generate-route-types","duration":20224,"timestamp":261577676374,"id":10,"parentId":1,"tags":{},"startTime":1779069549923,"traceId":"e14a09f076c0e4a6"},{"name":"public-dir-conflict-check","duration":87,"timestamp":261577696674,"id":11,"parentId":1,"tags":{},"startTime":1779069549943,"traceId":"e14a09f076c0e4a6"},{"name":"generate-routes-manifest","duration":4433,"timestamp":261577696880,"id":12,"parentId":1,"tags":{},"startTime":1779069549943,"traceId":"e14a09f076c0e4a6"},{"name":"run-turbopack","duration":5966801,"timestamp":261577720078,"id":14,"parentId":1,"tags":{},"startTime":1779069549966,"traceId":"e14a09f076c0e4a6"},{"name":"turbopack-build-events","duration":86,"timestamp":261578047840,"id":15,"parentId":1,"tags":{},"startTime":1779069550294,"traceId":"e14a09f076c0e4a6"},{"name":"run-typescript","duration":9798300,"timestamp":261583698277,"id":16,"parentId":1,"tags":{},"startTime":1779069555945,"traceId":"e14a09f076c0e4a6"},{"name":"generate-required-server-files","duration":2865,"timestamp":261593497739,"id":18,"parentId":1,"tags":{},"startTime":1779069565744,"traceId":"e14a09f076c0e4a6"},{"name":"check-static-error-page","duration":14251,"timestamp":261593677366,"id":20,"parentId":19,"tags":{},"startTime":1779069565924,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":526612,"timestamp":261593695515,"id":65,"parentId":22,"tags":{},"startTime":1779069565942,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":542707,"timestamp":261593679646,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779069565926,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":625615,"timestamp":261593696368,"id":70,"parentId":29,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":639359,"timestamp":261593682749,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779069565929,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":632767,"timestamp":261593696573,"id":72,"parentId":32,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":646084,"timestamp":261593683341,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779069565930,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":640714,"timestamp":261593695715,"id":66,"parentId":25,"tags":{},"startTime":1779069565942,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":654456,"timestamp":261593682041,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779069565928,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":645100,"timestamp":261593696817,"id":74,"parentId":34,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":658394,"timestamp":261593683586,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779069565930,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":656456,"timestamp":261593696098,"id":69,"parentId":28,"tags":{},"startTime":1779069565942,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":670004,"timestamp":261593682612,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779069565929,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":697672,"timestamp":261593696738,"id":73,"parentId":33,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":711026,"timestamp":261593683470,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779069565930,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":697818,"timestamp":261593696883,"id":76,"parentId":36,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":710550,"timestamp":261593684191,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779069565930,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":698083,"timestamp":261593696847,"id":75,"parentId":35,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":711273,"timestamp":261593683702,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779069565930,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":709739,"timestamp":261593696912,"id":77,"parentId":37,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":722341,"timestamp":261593684364,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779069565931,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":714422,"timestamp":261593695861,"id":67,"parentId":26,"tags":{},"startTime":1779069565942,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":728112,"timestamp":261593682231,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779069565929,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":715195,"timestamp":261593696955,"id":80,"parentId":40,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":729135,"timestamp":261593684699,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779069565931,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":729992,"timestamp":261593696941,"id":79,"parentId":39,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":742405,"timestamp":261593684593,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779069565931,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":730883,"timestamp":261593696507,"id":71,"parentId":30,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":744522,"timestamp":261593682915,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779069565929,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":730625,"timestamp":261593696967,"id":81,"parentId":42,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":742553,"timestamp":261593685085,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779069565931,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":730832,"timestamp":261593696926,"id":78,"parentId":38,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":743295,"timestamp":261593684491,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779069565931,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":736976,"timestamp":261593699234,"id":85,"parentId":47,"tags":{},"startTime":1779069565946,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":750345,"timestamp":261593685930,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779069565932,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":737303,"timestamp":261593699249,"id":86,"parentId":48,"tags":{},"startTime":1779069565946,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":750560,"timestamp":261593686050,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779069565932,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":739767,"timestamp":261593696996,"id":83,"parentId":45,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":751114,"timestamp":261593685682,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779069565932,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":738721,"timestamp":261593699209,"id":84,"parentId":46,"tags":{},"startTime":1779069565945,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":752212,"timestamp":261593685797,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779069565932,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":743075,"timestamp":261593696982,"id":82,"parentId":44,"tags":{},"startTime":1779069565943,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":754558,"timestamp":261593685544,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779069565932,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":741637,"timestamp":261593699287,"id":89,"parentId":51,"tags":{},"startTime":1779069565946,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":752790,"timestamp":261593688180,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779069565934,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":746910,"timestamp":261593695978,"id":68,"parentId":27,"tags":{},"startTime":1779069565942,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":760555,"timestamp":261593682376,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779069565929,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":743862,"timestamp":261593699263,"id":87,"parentId":49,"tags":{},"startTime":1779069565946,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":758564,"timestamp":261593686174,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779069565932,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":745650,"timestamp":261593699273,"id":88,"parentId":50,"tags":{},"startTime":1779069565946,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":756972,"timestamp":261593688046,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779069565934,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":732901,"timestamp":261593712277,"id":90,"parentId":24,"tags":{},"startTime":1779069565959,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":765154,"timestamp":261593680064,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779069565926,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":737640,"timestamp":261593713462,"id":91,"parentId":31,"tags":{},"startTime":1779069565960,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":768067,"timestamp":261593683083,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779069565929,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":737057,"timestamp":261593714281,"id":92,"parentId":41,"tags":{},"startTime":1779069565961,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":766586,"timestamp":261593684795,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779069565931,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":748526,"timestamp":261593715543,"id":93,"parentId":43,"tags":{},"startTime":1779069565962,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":778879,"timestamp":261593685240,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779069565932,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":764992,"timestamp":261593748611,"id":96,"parentId":53,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":824926,"timestamp":261593688757,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779069565935,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":765337,"timestamp":261593748589,"id":95,"parentId":52,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":825374,"timestamp":261593688597,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779069565935,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":775229,"timestamp":261593748818,"id":101,"parentId":59,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":833674,"timestamp":261593690428,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779069565937,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":777669,"timestamp":261593748628,"id":97,"parentId":54,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":837427,"timestamp":261593688939,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779069565935,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":779019,"timestamp":261593748673,"id":100,"parentId":58,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":837516,"timestamp":261593690218,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779069565936,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":780081,"timestamp":261593748535,"id":94,"parentId":23,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":848793,"timestamp":261593679866,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779069565926,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":781926,"timestamp":261593748644,"id":98,"parentId":55,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":841449,"timestamp":261593689158,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779069565935,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":786745,"timestamp":261593748841,"id":102,"parentId":61,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":844541,"timestamp":261593691080,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779069565937,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":787185,"timestamp":261593748891,"id":104,"parentId":63,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":844746,"timestamp":261593691372,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779069565938,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":787305,"timestamp":261593748907,"id":105,"parentId":60,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":845635,"timestamp":261593690602,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779069565937,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":759302,"timestamp":261593778891,"id":106,"parentId":57,"tags":{},"startTime":1779069566025,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":848631,"timestamp":261593689602,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779069565936,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":791551,"timestamp":261593748657,"id":99,"parentId":56,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":850873,"timestamp":261593689363,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779069565936,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":797686,"timestamp":261593748875,"id":103,"parentId":62,"tags":{},"startTime":1779069565995,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":855365,"timestamp":261593691227,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779069565938,"traceId":"e14a09f076c0e4a6"},{"name":"is-page-static","duration":892637,"timestamp":261593694064,"id":64,"parentId":21,"tags":{},"startTime":1779069565940,"traceId":"e14a09f076c0e4a6"},{"name":"check-page","duration":908208,"timestamp":261593678536,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779069565925,"traceId":"e14a09f076c0e4a6"},{"name":"static-check","duration":910224,"timestamp":261593676555,"id":19,"parentId":1,"tags":{},"startTime":1779069565923,"traceId":"e14a09f076c0e4a6"}]
2
- [{"name":"write-routes-manifest","duration":577,"timestamp":261594597254,"id":108,"parentId":1,"tags":{},"startTime":1779069566844,"traceId":"e14a09f076c0e4a6"},{"name":"load-dotenv","duration":54,"timestamp":261594610846,"id":111,"parentId":110,"tags":{},"startTime":1779069566857,"traceId":"e14a09f076c0e4a6"},{"name":"run-export-path-map","duration":550,"timestamp":261594613326,"id":112,"parentId":110,"tags":{},"startTime":1779069566860,"traceId":"e14a09f076c0e4a6"},{"name":"next-export","duration":592938,"timestamp":261594609636,"id":110,"parentId":1,"tags":{},"startTime":1779069566856,"traceId":"e14a09f076c0e4a6"},{"name":"move-exported-app-not-found-","duration":532,"timestamp":261595205595,"id":113,"parentId":109,"tags":{},"startTime":1779069567452,"traceId":"e14a09f076c0e4a6"},{"name":"move-exported-app-global-error-","duration":525,"timestamp":261595206248,"id":114,"parentId":109,"tags":{},"startTime":1779069567453,"traceId":"e14a09f076c0e4a6"},{"name":"static-generation","duration":605841,"timestamp":261594602993,"id":109,"parentId":1,"tags":{},"startTime":1779069566849,"traceId":"e14a09f076c0e4a6"},{"name":"write-routes-manifest","duration":442,"timestamp":261595209133,"id":115,"parentId":1,"tags":{},"startTime":1779069567455,"traceId":"e14a09f076c0e4a6"},{"name":"print-tree-view","duration":4678,"timestamp":261595221448,"id":116,"parentId":1,"tags":{},"startTime":1779069567468,"traceId":"e14a09f076c0e4a6"},{"name":"write-route-bundle-stats","duration":14876,"timestamp":261595226155,"id":117,"parentId":1,"tags":{},"startTime":1779069567472,"traceId":"e14a09f076c0e4a6"},{"name":"telemetry-flush","duration":33332,"timestamp":261595241061,"id":118,"parentId":1,"tags":{},"startTime":1779069567487,"traceId":"e14a09f076c0e4a6"},{"name":"next-build","duration":17786214,"timestamp":261577488213,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779069549734,"traceId":"e14a09f076c0e4a6"}]
1
+ [{"name":"generate-buildid","duration":265,"timestamp":262318970725,"id":4,"parentId":1,"tags":{},"startTime":1779070291217,"traceId":"6b260663e8ebb13d"},{"name":"load-custom-routes","duration":442,"timestamp":262318971168,"id":5,"parentId":1,"tags":{},"startTime":1779070291217,"traceId":"6b260663e8ebb13d"},{"name":"create-dist-dir","duration":697,"timestamp":262318971649,"id":6,"parentId":1,"tags":{},"startTime":1779070291218,"traceId":"6b260663e8ebb13d"},{"name":"clean","duration":30831,"timestamp":262318972980,"id":7,"parentId":1,"tags":{},"startTime":1779070291219,"traceId":"6b260663e8ebb13d"},{"name":"discover-routes","duration":32584,"timestamp":262319092087,"id":8,"parentId":1,"tags":{},"startTime":1779070291338,"traceId":"6b260663e8ebb13d"},{"name":"create-root-mapping","duration":189,"timestamp":262319124767,"id":9,"parentId":1,"tags":{},"startTime":1779070291371,"traceId":"6b260663e8ebb13d"},{"name":"generate-route-types","duration":20162,"timestamp":262319128456,"id":10,"parentId":1,"tags":{},"startTime":1779070291375,"traceId":"6b260663e8ebb13d"},{"name":"public-dir-conflict-check","duration":98,"timestamp":262319148700,"id":11,"parentId":1,"tags":{},"startTime":1779070291395,"traceId":"6b260663e8ebb13d"},{"name":"generate-routes-manifest","duration":6146,"timestamp":262319148930,"id":12,"parentId":1,"tags":{},"startTime":1779070291395,"traceId":"6b260663e8ebb13d"},{"name":"run-turbopack","duration":6397634,"timestamp":262319161501,"id":14,"parentId":1,"tags":{},"startTime":1779070291408,"traceId":"6b260663e8ebb13d"},{"name":"turbopack-build-events","duration":75,"timestamp":262319468727,"id":15,"parentId":1,"tags":{},"startTime":1779070291715,"traceId":"6b260663e8ebb13d"},{"name":"run-typescript","duration":10059802,"timestamp":262325573024,"id":16,"parentId":1,"tags":{},"startTime":1779070297819,"traceId":"6b260663e8ebb13d"},{"name":"generate-required-server-files","duration":3218,"timestamp":262335634296,"id":18,"parentId":1,"tags":{},"startTime":1779070307881,"traceId":"6b260663e8ebb13d"},{"name":"check-static-error-page","duration":13669,"timestamp":262335848753,"id":20,"parentId":19,"tags":{},"startTime":1779070308095,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":462315,"timestamp":262335866804,"id":65,"parentId":22,"tags":{},"startTime":1779070308113,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":478258,"timestamp":262335851058,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779070308097,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":598278,"timestamp":262335867353,"id":69,"parentId":28,"tags":{},"startTime":1779070308114,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":612039,"timestamp":262335853688,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":598050,"timestamp":262335867904,"id":71,"parentId":30,"tags":{},"startTime":1779070308114,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":612115,"timestamp":262335853876,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":609025,"timestamp":262335866404,"id":64,"parentId":21,"tags":{},"startTime":1779070308113,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":625606,"timestamp":262335849884,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779070308096,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":611183,"timestamp":262335867230,"id":68,"parentId":27,"tags":{},"startTime":1779070308114,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":624867,"timestamp":262335853612,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":612489,"timestamp":262335867976,"id":72,"parentId":32,"tags":{},"startTime":1779070308114,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":626348,"timestamp":262335854171,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":614242,"timestamp":262335867107,"id":67,"parentId":26,"tags":{},"startTime":1779070308113,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":627867,"timestamp":262335853532,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":630477,"timestamp":262335868175,"id":73,"parentId":33,"tags":{},"startTime":1779070308114,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":644453,"timestamp":262335854265,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":630760,"timestamp":262335868355,"id":77,"parentId":37,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":644259,"timestamp":262335854906,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":645164,"timestamp":262335868326,"id":76,"parentId":36,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":658776,"timestamp":262335854771,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":646023,"timestamp":262335867723,"id":70,"parentId":29,"tags":{},"startTime":1779070308114,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":660007,"timestamp":262335853768,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":646958,"timestamp":262335866965,"id":66,"parentId":25,"tags":{},"startTime":1779070308113,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":660545,"timestamp":262335853405,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":653295,"timestamp":262335868394,"id":79,"parentId":39,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":666670,"timestamp":262335855070,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":653646,"timestamp":262335868406,"id":80,"parentId":40,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":666951,"timestamp":262335855138,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":655678,"timestamp":262335868303,"id":75,"parentId":35,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":669627,"timestamp":262335854421,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":657819,"timestamp":262335868486,"id":84,"parentId":46,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":670292,"timestamp":262335856053,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779070308102,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":663606,"timestamp":262335868519,"id":86,"parentId":48,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":674563,"timestamp":262335857611,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779070308104,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":663851,"timestamp":262335868474,"id":83,"parentId":45,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":676423,"timestamp":262335855926,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779070308102,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":667397,"timestamp":262335868531,"id":87,"parentId":49,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":678217,"timestamp":262335857748,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779070308104,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":679715,"timestamp":262335868458,"id":82,"parentId":44,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":692515,"timestamp":262335855779,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779070308102,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":683537,"timestamp":262335868546,"id":88,"parentId":50,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":694319,"timestamp":262335857810,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779070308104,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":684791,"timestamp":262335868503,"id":85,"parentId":47,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":697159,"timestamp":262335856178,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779070308102,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":687460,"timestamp":262335868562,"id":89,"parentId":51,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":698194,"timestamp":262335857874,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779070308104,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":683383,"timestamp":262335874600,"id":92,"parentId":31,"tags":{},"startTime":1779070308121,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":704093,"timestamp":262335853951,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779070308100,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":690585,"timestamp":262335868379,"id":78,"parentId":38,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":704025,"timestamp":262335854992,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":685462,"timestamp":262335875925,"id":93,"parentId":43,"tags":{},"startTime":1779070308122,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":705923,"timestamp":262335855506,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779070308102,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":697083,"timestamp":262335868422,"id":81,"parentId":42,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":710190,"timestamp":262335855370,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779070308102,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":699727,"timestamp":262335873567,"id":91,"parentId":41,"tags":{},"startTime":1779070308120,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":718141,"timestamp":262335855198,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":705651,"timestamp":262335872598,"id":90,"parentId":24,"tags":{},"startTime":1779070308119,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":726804,"timestamp":262335851490,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779070308098,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":714595,"timestamp":262335868269,"id":74,"parentId":34,"tags":{},"startTime":1779070308115,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":728565,"timestamp":262335854341,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779070308101,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":710903,"timestamp":262335881063,"id":100,"parentId":58,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":732628,"timestamp":262335859396,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779070308106,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":721881,"timestamp":262335881185,"id":101,"parentId":59,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":743578,"timestamp":262335859541,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779070308106,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":725136,"timestamp":262335881208,"id":102,"parentId":61,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":744598,"timestamp":262335861811,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779070308108,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":738263,"timestamp":262335881223,"id":103,"parentId":62,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":757546,"timestamp":262335861990,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779070308108,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":739452,"timestamp":262335880983,"id":96,"parentId":53,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":762035,"timestamp":262335858449,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779070308105,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":740721,"timestamp":262335880933,"id":94,"parentId":23,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":770490,"timestamp":262335851293,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779070308098,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":745693,"timestamp":262335881234,"id":104,"parentId":63,"tags":{},"startTime":1779070308128,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":764788,"timestamp":262335862178,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779070308108,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":730836,"timestamp":262335897216,"id":105,"parentId":57,"tags":{},"startTime":1779070308143,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":769094,"timestamp":262335858992,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779070308105,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":723397,"timestamp":262335906771,"id":106,"parentId":60,"tags":{},"startTime":1779070308153,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":768871,"timestamp":262335861325,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779070308108,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":750954,"timestamp":262335880965,"id":95,"parentId":52,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":773640,"timestamp":262335858317,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779070308105,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":753361,"timestamp":262335880996,"id":97,"parentId":54,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":775861,"timestamp":262335858551,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779070308105,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":754202,"timestamp":262335881031,"id":98,"parentId":55,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":776585,"timestamp":262335858684,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779070308105,"traceId":"6b260663e8ebb13d"},{"name":"is-page-static","duration":762535,"timestamp":262335881047,"id":99,"parentId":56,"tags":{},"startTime":1779070308127,"traceId":"6b260663e8ebb13d"},{"name":"check-page","duration":784806,"timestamp":262335858816,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779070308105,"traceId":"6b260663e8ebb13d"},{"name":"static-check","duration":795768,"timestamp":262335847895,"id":19,"parentId":1,"tags":{},"startTime":1779070308094,"traceId":"6b260663e8ebb13d"}]
2
+ [{"name":"write-routes-manifest","duration":630,"timestamp":262336652892,"id":108,"parentId":1,"tags":{},"startTime":1779070308899,"traceId":"6b260663e8ebb13d"},{"name":"load-dotenv","duration":45,"timestamp":262336664729,"id":111,"parentId":110,"tags":{},"startTime":1779070308911,"traceId":"6b260663e8ebb13d"},{"name":"run-export-path-map","duration":808,"timestamp":262336668241,"id":112,"parentId":110,"tags":{},"startTime":1779070308915,"traceId":"6b260663e8ebb13d"},{"name":"next-export","duration":619835,"timestamp":262336663272,"id":110,"parentId":1,"tags":{},"startTime":1779070308910,"traceId":"6b260663e8ebb13d"},{"name":"move-exported-app-not-found-","duration":693,"timestamp":262337287387,"id":113,"parentId":109,"tags":{},"startTime":1779070309534,"traceId":"6b260663e8ebb13d"},{"name":"move-exported-app-global-error-","duration":447,"timestamp":262337288261,"id":114,"parentId":109,"tags":{},"startTime":1779070309535,"traceId":"6b260663e8ebb13d"},{"name":"static-generation","duration":633772,"timestamp":262336657163,"id":109,"parentId":1,"tags":{},"startTime":1779070308903,"traceId":"6b260663e8ebb13d"},{"name":"write-routes-manifest","duration":448,"timestamp":262337291234,"id":115,"parentId":1,"tags":{},"startTime":1779070309538,"traceId":"6b260663e8ebb13d"},{"name":"print-tree-view","duration":4386,"timestamp":262337310092,"id":116,"parentId":1,"tags":{},"startTime":1779070309556,"traceId":"6b260663e8ebb13d"},{"name":"write-route-bundle-stats","duration":12120,"timestamp":262337314511,"id":117,"parentId":1,"tags":{},"startTime":1779070309561,"traceId":"6b260663e8ebb13d"},{"name":"telemetry-flush","duration":42216,"timestamp":262337326659,"id":118,"parentId":1,"tags":{},"startTime":1779070309573,"traceId":"6b260663e8ebb13d"},{"name":"next-build","duration":18450395,"timestamp":262318918512,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779070291165,"traceId":"6b260663e8ebb13d"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5966801,"timestamp":261577720078,"id":14,"parentId":1,"tags":{},"startTime":1779069549966,"traceId":"e14a09f076c0e4a6"},{"name":"turbopack-build-events","duration":86,"timestamp":261578047840,"id":15,"parentId":1,"tags":{},"startTime":1779069550294,"traceId":"e14a09f076c0e4a6"},{"name":"run-typescript","duration":9798300,"timestamp":261583698277,"id":16,"parentId":1,"tags":{},"startTime":1779069555945,"traceId":"e14a09f076c0e4a6"},{"name":"static-check","duration":910224,"timestamp":261593676555,"id":19,"parentId":1,"tags":{},"startTime":1779069565923,"traceId":"e14a09f076c0e4a6"},{"name":"static-generation","duration":605841,"timestamp":261594602993,"id":109,"parentId":1,"tags":{},"startTime":1779069566849,"traceId":"e14a09f076c0e4a6"},{"name":"telemetry-flush","duration":33332,"timestamp":261595241061,"id":118,"parentId":1,"tags":{},"startTime":1779069567487,"traceId":"e14a09f076c0e4a6"},{"name":"next-build","duration":17786214,"timestamp":261577488213,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779069549734,"traceId":"e14a09f076c0e4a6"}]
1
+ [{"name":"run-turbopack","duration":6397634,"timestamp":262319161501,"id":14,"parentId":1,"tags":{},"startTime":1779070291408,"traceId":"6b260663e8ebb13d"},{"name":"turbopack-build-events","duration":75,"timestamp":262319468727,"id":15,"parentId":1,"tags":{},"startTime":1779070291715,"traceId":"6b260663e8ebb13d"},{"name":"run-typescript","duration":10059802,"timestamp":262325573024,"id":16,"parentId":1,"tags":{},"startTime":1779070297819,"traceId":"6b260663e8ebb13d"},{"name":"static-check","duration":795768,"timestamp":262335847895,"id":19,"parentId":1,"tags":{},"startTime":1779070308094,"traceId":"6b260663e8ebb13d"},{"name":"static-generation","duration":633772,"timestamp":262336657163,"id":109,"parentId":1,"tags":{},"startTime":1779070308903,"traceId":"6b260663e8ebb13d"},{"name":"telemetry-flush","duration":42216,"timestamp":262337326659,"id":118,"parentId":1,"tags":{},"startTime":1779070309573,"traceId":"6b260663e8ebb13d"},{"name":"next-build","duration":18450395,"timestamp":262318918512,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779070291165,"traceId":"6b260663e8ebb13d"}]
@@ -1929,12 +1929,25 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1929
1929
  Existing inline transition already covers 'filter 200ms
1930
1930
  ease-out' (R557 cadence) — both brightness AND drop-
1931
1931
  shadow ease at the same beat. */
1932
- className={`shrink-0 transition-[transform,filter] duration-200 ease-out hover:scale-105 hover:rotate-6 hover:brightness-110 hover:drop-shadow-[0_0_8px_currentColor] transform-gpu${!reducedMotion ? ' anet-topo-brand-logo-breath' : ''}`}
1932
+ /* R683 replaced Tailwind `hover:brightness-110 hover:drop-
1933
+ shadow-[0_0_8px_currentColor]` with the new `.anet-topo-
1934
+ brand-logo-mark` CSS class (defined in globals.css) which
1935
+ applies a MULTI-LAYER filter on :hover — near 8px + far
1936
+ 16px drop-shadow at currentColor + brightness(1.10). This
1937
+ brings the brand mark into the multi-layer halo family
1938
+ using the same near + far layered glow vocabulary that
1939
+ 41 other surfaces share. Tailwind utility composition for
1940
+ multi-drop-shadow doesn't stack cleanly (R659 detour),
1941
+ so a custom CSS class wins over the cascade.
1942
+ Transform classes (hover:scale-105, hover:rotate-6) +
1943
+ breath className preserved unchanged. */
1944
+ className={`anet-topo-brand-logo-mark shrink-0 transition-[transform,filter] duration-200 ease-out hover:scale-105 hover:rotate-6 transform-gpu${!reducedMotion ? ' anet-topo-brand-logo-breath' : ''}`}
1933
1945
  data-topo-brand-logo
1934
1946
  data-topo-brand-logo-hover-scale="1.05"
1935
1947
  data-topo-brand-logo-hover-rotate="6deg"
1936
1948
  data-topo-brand-logo-hover-brightness="1.1"
1937
- data-topo-brand-logo-hover-drop-shadow="0_0_8px_currentColor"
1949
+ data-topo-brand-logo-hover-drop-shadow="0_0_8px_currentColor;0_0_16px_currentColor"
1950
+ data-topo-brand-logo-halo-layers="2"
1938
1951
  data-topo-brand-logo-breath={!reducedMotion ? 'true' : 'false'}
1939
1952
  style={{
1940
1953
  color: isLight ? '#0d9488' : '#67e8f9',
@@ -2097,7 +2110,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2097
2110
  ease-out' alongside the existing 'letter-spacing'
2098
2111
  200ms cadence. data-topo-section-title-hover-fw attr
2099
2112
  surfaces the landing weight for tests. */}
2100
- <h2 className="text-lg text-white font-semibold group-hover:font-bold leading-tight tracking-tight group-hover:tracking-tighter transition-[letter-spacing,font-weight] duration-200 ease-out" data-topo-section-title data-topo-section-title-hover-tracking="tracking-tighter" data-topo-section-title-hover-fw="700">Command mesh</h2>
2113
+ <h2 className="text-lg text-white font-semibold group-hover:font-bold leading-tight tracking-tight group-hover:tracking-tighter transition-[letter-spacing,font-weight] duration-200 ease-out" data-topo-section-title data-topo-section-title-hover-tracking="tracking-tighter" data-topo-section-title-hover-fw="700" data-topo-section-title-halo-layers="2">Command mesh</h2>
2101
2114
  </div>
2102
2115
  </div>
2103
2116
  {/* Round 328 / Loop: chip-row strip wrapper gap 2 → 2.5
package/app/globals.css CHANGED
@@ -1100,6 +1100,63 @@ body {
1100
1100
  animation: anet-topo-brand-logo-breath-kf 5s ease-in-out infinite;
1101
1101
  }
1102
1102
 
1103
+ /* Round 683 — brand 书生 logo extends single-layer drop-shadow hover
1104
+ (R604, Tailwind `hover:drop-shadow-[0_0_8px_currentColor]`) to the
1105
+ multi-layer halo family vocabulary: near 8px + far 16px (2× blur
1106
+ stride) at currentColor (inherits inline style.color = teal #0d9488
1107
+ / cyan #67e8f9), stacked with brightness(1.10). Matches R642-R667
1108
+ 0.5×-falloff convention by using currentColor for both layers —
1109
+ the same hue at native alpha layers up because drop-shadow alpha
1110
+ accumulates additively when stacked.
1111
+ Pure CSS `:hover` so no new React state needed; the SVG element
1112
+ listens via its own pseudo-class. Inline transition list already
1113
+ covers `filter 200ms ease-out` (R557) so the multi-layer halo eases
1114
+ under the same cadence. Tailwind v4 utility composition for multi-
1115
+ drop-shadow doesn't work cleanly (per R659 detour note), so dropping
1116
+ the utility classes (`hover:brightness-110`, `hover:drop-shadow-[...]`)
1117
+ in favor of an explicit CSS rule that wins over the cascade.
1118
+ 42nd anchor in multi-layer halo family — first brand-mark anchor. */
1119
+ .anet-topo-brand-logo-mark:hover {
1120
+ filter: drop-shadow(0 0 8px currentColor)
1121
+ drop-shadow(0 0 16px currentColor)
1122
+ brightness(1.10);
1123
+ }
1124
+
1125
+ /* Round 684 — title-block H2 "Command mesh" gains multi-layer halo
1126
+ via the wrapper's `:hover` (sibling pattern to R683 brand logo —
1127
+ both lift together when ANY surface in the title-block cluster
1128
+ is hovered, including the brand logo, kicker, or H2 itself).
1129
+ Pre-R684 the H2 had only 2 typographic hover axes (R554 tracking-
1130
+ tighter + R556 font-bold) via group-hover Tailwind utilities; the
1131
+ paint axis was untouched. R684 adds the multi-layer halo paint
1132
+ axis to the H2's hover signature — same near + far layered glow
1133
+ vocabulary the 42 other surfaces in the family share.
1134
+ Stride: 4 + 8px (2× blur stride at h2 scale, text-lg = 18px —
1135
+ smaller than brand logo's 8+16 since the H2 is text not graphic).
1136
+ Tint: currentColor — inherits the H2's resolved fill color
1137
+ (white on cyber, darker on light theme overrides).
1138
+ No brightness multiply — H2 text-white is already near-peak
1139
+ luminance on cyber; adding brightness would push past saturation.
1140
+ The selector targets the H2 via its data-attr `data-topo-section-
1141
+ title` nested under the title-block wrapper's group container
1142
+ (`data-topo-section-titleblock-group`). Inline `transition-
1143
+ [letter-spacing,font-weight]` on the H2 doesn't include filter,
1144
+ so the halo would snap on. Add a transition rule here so the
1145
+ halo eases under the same 200ms cadence as the existing 2 axes —
1146
+ keeps the cluster's hover gesture motion-coherent.
1147
+ 43rd anchor in multi-layer halo family — sibling to R683 brand
1148
+ logo, closing the title-block cluster's paint-axis halo at the
1149
+ H2 element scope. */
1150
+ [data-topo-section-titleblock-group]:hover [data-topo-section-title] {
1151
+ filter: drop-shadow(0 0 4px currentColor)
1152
+ drop-shadow(0 0 8px currentColor);
1153
+ }
1154
+ [data-topo-section-title] {
1155
+ transition: letter-spacing 200ms ease-out,
1156
+ font-weight 200ms ease-out,
1157
+ filter 200ms ease-out;
1158
+ }
1159
+
1103
1160
  /* ─────────────────────────────────────────────────────────────────────
1104
1161
  Round 29 — prefers-reduced-motion a11y sweep
1105
1162
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.196",
3
+ "version": "0.5.3-preview.198",
4
4
  "description": "Agent Network Dashboard \u2014 Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,85 @@
1
+ /* Round 683 — brand 书生 logo extends single-layer drop-shadow hover
2
+ * (R604, Tailwind `hover:drop-shadow-[0_0_8px_currentColor]`) to the
3
+ * multi-layer halo family by replacing the Tailwind utility with a
4
+ * custom CSS class `.anet-topo-brand-logo-mark` that applies near 8px
5
+ * + far 16px (2× blur stride) drop-shadow at currentColor (inherits
6
+ * teal #0d9488 / cyan #67e8f9 per inline style.color) + brightness(1.10)
7
+ * via `:hover` pseudo-class — no React state needed.
8
+ *
9
+ * Source assertions:
10
+ * - globals.css: .anet-topo-brand-logo-mark:hover with 2 drop-shadow
11
+ * - TopoGraph.tsx: className includes anet-topo-brand-logo-mark
12
+ * - TopoGraph.tsx: hover:drop-shadow / hover:brightness REMOVED from
13
+ * the className (replaced by the CSS class)
14
+ *
15
+ * Runtime assertions:
16
+ * - brand logo SVG present in /login or root (renders pre-auth too)
17
+ * - className contains anet-topo-brand-logo-mark
18
+ * - data-topo-brand-logo-halo-layers="2" attr present
19
+ */
20
+ import { chromium } from 'playwright';
21
+ import { readFileSync } from 'node:fs';
22
+
23
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
24
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
25
+
26
+ const browser = await chromium.launch({ headless: true });
27
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
28
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
29
+ await ctx.addInitScript(() => {
30
+ try {
31
+ localStorage.setItem('anet-theme', 'cyber');
32
+ localStorage.setItem('anet-topo-layout', 'ring');
33
+ sessionStorage.setItem('anet_v3_auth', '1');
34
+ } catch {}
35
+ });
36
+ await ctx.route('**/api/hub/status*', async (route) => {
37
+ const r = await route.fetch();
38
+ const b = await r.json();
39
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
40
+ const mk = (alias) => ({
41
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
42
+ network_id: nid, project_dir: null,
43
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
44
+ });
45
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
46
+ });
47
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
48
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
49
+ const page = await ctx.newPage();
50
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
51
+ await page.waitForSelector('[data-topo-brand-logo]', { timeout: 15000, state: 'attached' });
52
+ await page.waitForTimeout(300);
53
+
54
+ const runtimeState = await page.evaluate(() => {
55
+ const el = document.querySelector('[data-topo-brand-logo]');
56
+ return el ? {
57
+ haloLayers: el.getAttribute('data-topo-brand-logo-halo-layers'),
58
+ classes: el.getAttribute('class'),
59
+ } : null;
60
+ });
61
+
62
+ await browser.close();
63
+
64
+ const tsxSrc = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
65
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
66
+
67
+ const cssClassDefined = /\.anet-topo-brand-logo-mark:hover\s*\{[\s\S]*?drop-shadow\(0 0 8px currentColor\)[\s\S]*?drop-shadow\(0 0 16px currentColor\)[\s\S]*?brightness\(1\.10\)/.test(cssSrc);
68
+ const tsxClassAdded = /className=\{`anet-topo-brand-logo-mark/.test(tsxSrc);
69
+ const tailwindRemoved = !/hover:brightness-110 hover:drop-shadow-\[0_0_8px_currentColor\]/.test(tsxSrc);
70
+ const hasHaloAttr = /data-topo-brand-logo-halo-layers="2"/.test(tsxSrc);
71
+
72
+ const results = {
73
+ brand_logo_present: !!runtimeState,
74
+ has_class_runtime: !!runtimeState?.classes && /anet-topo-brand-logo-mark/.test(runtimeState.classes),
75
+ halo_layers_runtime: runtimeState?.haloLayers === '2',
76
+ css_class_defined: cssClassDefined,
77
+ tsx_class_added: tsxClassAdded,
78
+ tsx_tailwind_removed: tailwindRemoved,
79
+ tsx_halo_attr: hasHaloAttr,
80
+ };
81
+ const ok = Object.values(results).every(Boolean);
82
+ console.log(`${ok ? '✅' : '❌'} R683 brand logo multi-layer halo (first brand-mark anchor):`,
83
+ JSON.stringify(results, null, 2),
84
+ `\n runtime: ${JSON.stringify(runtimeState)}`);
85
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,88 @@
1
+ /* Round 684 — H2 title "Command mesh" extends from 2 typographic hover
2
+ * axes (R554 tracking-tighter + R556 font-bold via group-hover) to
3
+ * also include a multi-layer halo paint axis. Sibling to R683 brand
4
+ * logo (both lift together when ANY surface in the title-block cluster
5
+ * is hovered).
6
+ *
7
+ * Implemented via CSS rule targeting `[data-topo-section-titleblock-
8
+ * group]:hover [data-topo-section-title]` — 2-layer drop-shadow at
9
+ * currentColor (inherits H2 fill), 4+8px stride.
10
+ *
11
+ * Source assertions:
12
+ * - globals.css has the cluster-hover descendant rule with 2 drop-
13
+ * shadow layers
14
+ * - globals.css has transition on the H2 including 'filter 200ms'
15
+ * - TopoGraph.tsx H2 has data-topo-section-title-halo-layers="2"
16
+ *
17
+ * Runtime assertions:
18
+ * - H2 element present with data-topo-section-title-halo-layers="2"
19
+ * - title-block wrapper present (group hover target)
20
+ */
21
+ import { chromium } from 'playwright';
22
+ import { readFileSync } from 'node:fs';
23
+
24
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
25
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
26
+
27
+ const browser = await chromium.launch({ headless: true });
28
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
29
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
30
+ await ctx.addInitScript(() => {
31
+ try {
32
+ localStorage.setItem('anet-theme', 'cyber');
33
+ localStorage.setItem('anet-topo-layout', 'ring');
34
+ sessionStorage.setItem('anet_v3_auth', '1');
35
+ } catch {}
36
+ });
37
+ await ctx.route('**/api/hub/status*', async (route) => {
38
+ const r = await route.fetch();
39
+ const b = await r.json();
40
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
41
+ const mk = (alias) => ({
42
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
43
+ network_id: nid, project_dir: null,
44
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
45
+ });
46
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
47
+ });
48
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
49
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
50
+ const page = await ctx.newPage();
51
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
52
+ await page.waitForSelector('[data-topo-section-title]', { timeout: 15000, state: 'attached' });
53
+ await page.waitForTimeout(300);
54
+
55
+ const runtimeState = await page.evaluate(() => {
56
+ const title = document.querySelector('[data-topo-section-title]');
57
+ const wrap = document.querySelector('[data-topo-section-titleblock-group]');
58
+ return {
59
+ title_present: !!title,
60
+ wrap_present: !!wrap,
61
+ halo_layers: title?.getAttribute('data-topo-section-title-halo-layers'),
62
+ text: title?.textContent,
63
+ };
64
+ });
65
+
66
+ await browser.close();
67
+
68
+ const tsxSrc = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
69
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
70
+
71
+ const cssHoverRule = /\[data-topo-section-titleblock-group\]:hover \[data-topo-section-title\]\s*\{[\s\S]*?drop-shadow\(0 0 4px currentColor\)[\s\S]*?drop-shadow\(0 0 8px currentColor\)/.test(cssSrc);
72
+ const cssTransition = /\[data-topo-section-title\]\s*\{[\s\S]*?transition:[\s\S]*?filter 200ms/.test(cssSrc);
73
+ const tsxHaloAttr = /data-topo-section-title-halo-layers="2"/.test(tsxSrc);
74
+
75
+ const results = {
76
+ title_present: runtimeState.title_present,
77
+ wrap_present: runtimeState.wrap_present,
78
+ runtime_halo_layers: runtimeState.halo_layers === '2',
79
+ runtime_text: runtimeState.text === 'Command mesh',
80
+ css_hover_rule: cssHoverRule,
81
+ css_transition: cssTransition,
82
+ tsx_halo_attr: tsxHaloAttr,
83
+ };
84
+ const ok = Object.values(results).every(Boolean);
85
+ console.log(`${ok ? '✅' : '❌'} R684 H2 title multi-layer halo (sibling to R683 brand logo):`,
86
+ JSON.stringify(results, null, 2),
87
+ `\n runtime: ${JSON.stringify(runtimeState)}`);
88
+ process.exit(ok ? 0 : 1);