@sleep2agi/agent-network-dashboard 0.5.1-preview.57 → 0.5.1-preview.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +1 -1
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/admin.html +1 -1
  21. package/.next/server/app/admin.rsc +1 -1
  22. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  23. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  28. package/.next/server/app/index.html +2 -2
  29. package/.next/server/app/index.rsc +2 -2
  30. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/login.html +2 -2
  37. package/.next/server/app/login.rsc +2 -2
  38. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  39. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  40. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  44. package/.next/server/app/logs.html +1 -1
  45. package/.next/server/app/logs.rsc +1 -1
  46. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  52. package/.next/server/app/messages.html +1 -1
  53. package/.next/server/app/messages.rsc +1 -1
  54. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  60. package/.next/server/app/node.html +1 -1
  61. package/.next/server/app/node.rsc +1 -1
  62. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  63. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  68. package/.next/server/app/nodes.html +1 -1
  69. package/.next/server/app/nodes.rsc +1 -1
  70. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  76. package/.next/server/app/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/server-logs.html +1 -1
  78. package/.next/server/app/server-logs.rsc +1 -1
  79. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  85. package/.next/server/app/settings/networks.html +1 -1
  86. package/.next/server/app/settings/networks.rsc +1 -1
  87. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  94. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/settings/tokens.html +1 -1
  96. package/.next/server/app/settings/tokens.rsc +1 -1
  97. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  104. package/.next/server/app/settings.html +2 -2
  105. package/.next/server/app/settings.rsc +2 -2
  106. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  111. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  112. package/.next/server/app/tasks.html +1 -1
  113. package/.next/server/app/tasks.rsc +1 -1
  114. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  120. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
  121. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  126. package/.next/server/middleware-build-manifest.js +3 -3
  127. package/.next/server/pages/404.html +1 -1
  128. package/.next/server/pages/500.html +1 -1
  129. package/.next/static/chunks/{0vh3xqcpo04~a.js → 0bhz.u~29khvn.js} +3 -3
  130. package/.next/static/chunks/{14vv4p7-u1o5q.js → 14286v4_~z.qj.js} +1 -1
  131. package/.next/static/chunks/{05w9u-mpyn5m3.js → 14s7vjc_.9ey7.js} +1 -1
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +36 -8
  135. package/package.json +1 -1
  136. package/scripts/topo-chip-row-hover-lift-test.mjs +95 -0
  137. package/scripts/topo-filter-pill-hover-lift-test.mjs +101 -0
  138. /package/.next/static/{vHPpNXTwlJbOzB5cnE4Ki → R6sI--ujZV5ZqhwSJgZdY}/_buildManifest.js +0 -0
  139. /package/.next/static/{vHPpNXTwlJbOzB5cnE4Ki → R6sI--ujZV5ZqhwSJgZdY}/_clientMiddlewareManifest.js +0 -0
  140. /package/.next/static/{vHPpNXTwlJbOzB5cnE4Ki → R6sI--ujZV5ZqhwSJgZdY}/_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.1-preview.56"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.58"],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.1-preview.56"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.58"],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":430,"timestamp":148420474047,"id":4,"parentId":1,"tags":{},"startTime":1778956392720,"traceId":"6ea5bea33df7190e"},{"name":"load-custom-routes","duration":612,"timestamp":148420474661,"id":5,"parentId":1,"tags":{},"startTime":1778956392721,"traceId":"6ea5bea33df7190e"},{"name":"create-dist-dir","duration":873,"timestamp":148420475328,"id":6,"parentId":1,"tags":{},"startTime":1778956392722,"traceId":"6ea5bea33df7190e"},{"name":"clean","duration":37083,"timestamp":148420477089,"id":7,"parentId":1,"tags":{},"startTime":1778956392723,"traceId":"6ea5bea33df7190e"},{"name":"discover-routes","duration":27397,"timestamp":148420600849,"id":8,"parentId":1,"tags":{},"startTime":1778956392847,"traceId":"6ea5bea33df7190e"},{"name":"create-root-mapping","duration":116,"timestamp":148420628308,"id":9,"parentId":1,"tags":{},"startTime":1778956392875,"traceId":"6ea5bea33df7190e"},{"name":"generate-route-types","duration":19742,"timestamp":148420630870,"id":10,"parentId":1,"tags":{},"startTime":1778956392877,"traceId":"6ea5bea33df7190e"},{"name":"public-dir-conflict-check","duration":146,"timestamp":148420650709,"id":11,"parentId":1,"tags":{},"startTime":1778956392897,"traceId":"6ea5bea33df7190e"},{"name":"generate-routes-manifest","duration":4712,"timestamp":148420651065,"id":12,"parentId":1,"tags":{},"startTime":1778956392897,"traceId":"6ea5bea33df7190e"},{"name":"run-turbopack","duration":6261490,"timestamp":148420660916,"id":14,"parentId":1,"tags":{},"startTime":1778956392907,"traceId":"6ea5bea33df7190e"},{"name":"turbopack-build-events","duration":101,"timestamp":148420954988,"id":15,"parentId":1,"tags":{},"startTime":1778956393201,"traceId":"6ea5bea33df7190e"},{"name":"run-typescript","duration":10107470,"timestamp":148426936670,"id":16,"parentId":1,"tags":{},"startTime":1778956399183,"traceId":"6ea5bea33df7190e"},{"name":"generate-required-server-files","duration":2569,"timestamp":148437045662,"id":18,"parentId":1,"tags":{},"startTime":1778956409292,"traceId":"6ea5bea33df7190e"},{"name":"check-static-error-page","duration":12458,"timestamp":148437234886,"id":20,"parentId":19,"tags":{},"startTime":1778956409481,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":492724,"timestamp":148437250643,"id":65,"parentId":22,"tags":{},"startTime":1778956409497,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":506241,"timestamp":148437237269,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778956409484,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":588406,"timestamp":148437250888,"id":67,"parentId":26,"tags":{},"startTime":1778956409497,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":599548,"timestamp":148437239838,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778956409486,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":593265,"timestamp":148437251759,"id":72,"parentId":32,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":604472,"timestamp":148437240622,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778956409487,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":619237,"timestamp":148437251960,"id":73,"parentId":33,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":630546,"timestamp":148437240725,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778956409487,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":627893,"timestamp":148437250323,"id":64,"parentId":21,"tags":{},"startTime":1778956409497,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":642165,"timestamp":148437236121,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778956409482,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":639693,"timestamp":148437252067,"id":74,"parentId":34,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":650986,"timestamp":148437240856,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778956409487,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":648583,"timestamp":148437251024,"id":68,"parentId":27,"tags":{},"startTime":1778956409497,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":659723,"timestamp":148437239956,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778956409486,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":649351,"timestamp":148437250767,"id":66,"parentId":25,"tags":{},"startTime":1778956409497,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":660510,"timestamp":148437239656,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778956409486,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":648776,"timestamp":148437251604,"id":71,"parentId":30,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":660122,"timestamp":148437240311,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778956409487,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":661709,"timestamp":148437252189,"id":79,"parentId":39,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":672371,"timestamp":148437241579,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":668956,"timestamp":148437252157,"id":77,"parentId":37,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":679742,"timestamp":148437241419,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":676077,"timestamp":148437252125,"id":76,"parentId":36,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":686963,"timestamp":148437241294,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":676251,"timestamp":148437252173,"id":78,"parentId":38,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":686939,"timestamp":148437241515,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":683525,"timestamp":148437252232,"id":82,"parentId":44,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":693511,"timestamp":148437242293,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778956409489,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":688029,"timestamp":148437252265,"id":84,"parentId":46,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":697888,"timestamp":148437242450,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778956409489,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":690601,"timestamp":148437252216,"id":81,"parentId":42,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":700918,"timestamp":148437241954,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":695616,"timestamp":148437252293,"id":86,"parentId":48,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":703986,"timestamp":148437243980,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778956409490,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":695884,"timestamp":148437252248,"id":83,"parentId":45,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":705789,"timestamp":148437242380,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778956409489,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":696873,"timestamp":148437251429,"id":70,"parentId":29,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":708125,"timestamp":148437240202,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778956409486,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":701567,"timestamp":148437252277,"id":85,"parentId":47,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":710137,"timestamp":148437243828,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778956409490,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":701835,"timestamp":148437252318,"id":88,"parentId":50,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":709954,"timestamp":148437244238,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778956409491,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":702034,"timestamp":148437252307,"id":87,"parentId":49,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":710249,"timestamp":148437244127,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778956409490,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":698111,"timestamp":148437259295,"id":90,"parentId":24,"tags":{},"startTime":1778956409506,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":719753,"timestamp":148437237700,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778956409484,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":708029,"timestamp":148437252205,"id":80,"parentId":40,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":718630,"timestamp":148437241649,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":692647,"timestamp":148437267787,"id":92,"parentId":41,"tags":{},"startTime":1778956409514,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":718750,"timestamp":148437241717,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":708499,"timestamp":148437252101,"id":75,"parentId":35,"tags":{},"startTime":1778956409498,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":719679,"timestamp":148437240949,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778956409487,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":697746,"timestamp":148437263566,"id":91,"parentId":31,"tags":{},"startTime":1778956409510,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":720958,"timestamp":148437240394,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778956409487,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":693241,"timestamp":148437269169,"id":93,"parentId":43,"tags":{},"startTime":1778956409515,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":720370,"timestamp":148437242078,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778956409488,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":693931,"timestamp":148437272467,"id":96,"parentId":53,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":721659,"timestamp":148437244770,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778956409491,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":720388,"timestamp":148437252333,"id":89,"parentId":51,"tags":{},"startTime":1778956409499,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":728439,"timestamp":148437244342,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778956409491,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":700794,"timestamp":148437272513,"id":99,"parentId":56,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":728073,"timestamp":148437245273,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778956409492,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":707461,"timestamp":148437272647,"id":101,"parentId":59,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":734041,"timestamp":148437246111,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778956409492,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":734040,"timestamp":148437251148,"id":69,"parentId":28,"tags":{},"startTime":1778956409497,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":745158,"timestamp":148437240104,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778956409486,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":715233,"timestamp":148437272671,"id":102,"parentId":61,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":741185,"timestamp":148437246761,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778956409493,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":722789,"timestamp":148437272694,"id":104,"parentId":63,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":748426,"timestamp":148437247105,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778956409493,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":724740,"timestamp":148437281330,"id":105,"parentId":60,"tags":{},"startTime":1778956409528,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":759838,"timestamp":148437246309,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778956409493,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":707679,"timestamp":148437301970,"id":106,"parentId":57,"tags":{},"startTime":1778956409548,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":764244,"timestamp":148437245443,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778956409492,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":750224,"timestamp":148437272499,"id":98,"parentId":55,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":777683,"timestamp":148437245106,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778956409491,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":752990,"timestamp":148437272485,"id":97,"parentId":54,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":780628,"timestamp":148437244894,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778956409491,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":777730,"timestamp":148437272523,"id":100,"parentId":58,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":804448,"timestamp":148437245876,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778956409492,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":778293,"timestamp":148437272424,"id":94,"parentId":23,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":813287,"timestamp":148437237501,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778956409484,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":783794,"timestamp":148437272455,"id":95,"parentId":52,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":811646,"timestamp":148437244648,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778956409491,"traceId":"6ea5bea33df7190e"},{"name":"is-page-static","duration":804363,"timestamp":148437272680,"id":103,"parentId":62,"tags":{},"startTime":1778956409519,"traceId":"6ea5bea33df7190e"},{"name":"check-page","duration":830190,"timestamp":148437246922,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778956409493,"traceId":"6ea5bea33df7190e"},{"name":"static-check","duration":843134,"timestamp":148437234021,"id":19,"parentId":1,"tags":{},"startTime":1778956409480,"traceId":"6ea5bea33df7190e"}]
2
- [{"name":"write-routes-manifest","duration":535,"timestamp":148438087293,"id":108,"parentId":1,"tags":{},"startTime":1778956410334,"traceId":"6ea5bea33df7190e"},{"name":"load-dotenv","duration":63,"timestamp":148438098812,"id":111,"parentId":110,"tags":{},"startTime":1778956410345,"traceId":"6ea5bea33df7190e"},{"name":"run-export-path-map","duration":819,"timestamp":148438103179,"id":112,"parentId":110,"tags":{},"startTime":1778956410349,"traceId":"6ea5bea33df7190e"},{"name":"next-export","duration":624259,"timestamp":148438097077,"id":110,"parentId":1,"tags":{},"startTime":1778956410343,"traceId":"6ea5bea33df7190e"},{"name":"move-exported-app-not-found-","duration":617,"timestamp":148438725583,"id":113,"parentId":109,"tags":{},"startTime":1778956410972,"traceId":"6ea5bea33df7190e"},{"name":"move-exported-app-global-error-","duration":496,"timestamp":148438726337,"id":114,"parentId":109,"tags":{},"startTime":1778956410973,"traceId":"6ea5bea33df7190e"},{"name":"static-generation","duration":637968,"timestamp":148438091279,"id":109,"parentId":1,"tags":{},"startTime":1778956410338,"traceId":"6ea5bea33df7190e"},{"name":"write-routes-manifest","duration":504,"timestamp":148438729601,"id":115,"parentId":1,"tags":{},"startTime":1778956410976,"traceId":"6ea5bea33df7190e"},{"name":"print-tree-view","duration":4953,"timestamp":148438744448,"id":116,"parentId":1,"tags":{},"startTime":1778956410991,"traceId":"6ea5bea33df7190e"},{"name":"write-route-bundle-stats","duration":17346,"timestamp":148438749443,"id":117,"parentId":1,"tags":{},"startTime":1778956410996,"traceId":"6ea5bea33df7190e"},{"name":"telemetry-flush","duration":29605,"timestamp":148438766830,"id":118,"parentId":1,"tags":{},"startTime":1778956411013,"traceId":"6ea5bea33df7190e"},{"name":"next-build","duration":18377551,"timestamp":148420418917,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778956392665,"traceId":"6ea5bea33df7190e"}]
1
+ [{"name":"generate-buildid","duration":272,"timestamp":149085546830,"id":4,"parentId":1,"tags":{},"startTime":1778957057793,"traceId":"10f5ede51c9a4adc"},{"name":"load-custom-routes","duration":439,"timestamp":149085547241,"id":5,"parentId":1,"tags":{},"startTime":1778957057794,"traceId":"10f5ede51c9a4adc"},{"name":"create-dist-dir","duration":675,"timestamp":149085547720,"id":6,"parentId":1,"tags":{},"startTime":1778957057794,"traceId":"10f5ede51c9a4adc"},{"name":"clean","duration":32001,"timestamp":149085549066,"id":7,"parentId":1,"tags":{},"startTime":1778957057795,"traceId":"10f5ede51c9a4adc"},{"name":"discover-routes","duration":10136,"timestamp":149085678152,"id":8,"parentId":1,"tags":{},"startTime":1778957057924,"traceId":"10f5ede51c9a4adc"},{"name":"create-root-mapping","duration":146,"timestamp":149085688360,"id":9,"parentId":1,"tags":{},"startTime":1778957057935,"traceId":"10f5ede51c9a4adc"},{"name":"generate-route-types","duration":35059,"timestamp":149085691602,"id":10,"parentId":1,"tags":{},"startTime":1778957057938,"traceId":"10f5ede51c9a4adc"},{"name":"public-dir-conflict-check","duration":101,"timestamp":149085726769,"id":11,"parentId":1,"tags":{},"startTime":1778957057973,"traceId":"10f5ede51c9a4adc"},{"name":"generate-routes-manifest","duration":4554,"timestamp":149085726994,"id":12,"parentId":1,"tags":{},"startTime":1778957057973,"traceId":"10f5ede51c9a4adc"},{"name":"run-turbopack","duration":5729677,"timestamp":149085737815,"id":14,"parentId":1,"tags":{},"startTime":1778957057984,"traceId":"10f5ede51c9a4adc"},{"name":"turbopack-build-events","duration":117,"timestamp":149086053692,"id":15,"parentId":1,"tags":{},"startTime":1778957058300,"traceId":"10f5ede51c9a4adc"},{"name":"run-typescript","duration":10212081,"timestamp":149091477687,"id":16,"parentId":1,"tags":{},"startTime":1778957063724,"traceId":"10f5ede51c9a4adc"},{"name":"generate-required-server-files","duration":3000,"timestamp":149101691100,"id":18,"parentId":1,"tags":{},"startTime":1778957073937,"traceId":"10f5ede51c9a4adc"},{"name":"check-static-error-page","duration":14709,"timestamp":149101863209,"id":20,"parentId":19,"tags":{},"startTime":1778957074109,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":449021,"timestamp":149101881148,"id":65,"parentId":22,"tags":{},"startTime":1778957074127,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":464208,"timestamp":149101866117,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778957074112,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":587098,"timestamp":149101883610,"id":71,"parentId":30,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":600768,"timestamp":149101870051,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778957074116,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":611494,"timestamp":149101883111,"id":69,"parentId":28,"tags":{},"startTime":1778957074129,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":625002,"timestamp":149101869743,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778957074116,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":635473,"timestamp":149101883692,"id":72,"parentId":32,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":648781,"timestamp":149101870466,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778957074117,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":636551,"timestamp":149101883897,"id":73,"parentId":33,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":649916,"timestamp":149101870602,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778957074117,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":649532,"timestamp":149101884049,"id":75,"parentId":35,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":662789,"timestamp":149101870866,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778957074117,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":660459,"timestamp":149101883428,"id":70,"parentId":29,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":674107,"timestamp":149101869880,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778957074116,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":666932,"timestamp":149101884121,"id":77,"parentId":37,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":679546,"timestamp":149101871580,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778957074118,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":667381,"timestamp":149101883997,"id":74,"parentId":34,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":680707,"timestamp":149101870723,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778957074117,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":675920,"timestamp":149101884156,"id":79,"parentId":39,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":688300,"timestamp":149101871833,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778957074118,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":676186,"timestamp":149101884172,"id":80,"parentId":40,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":688445,"timestamp":149101871949,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778957074118,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":681370,"timestamp":149101882797,"id":67,"parentId":26,"tags":{},"startTime":1778957074129,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":694727,"timestamp":149101869495,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778957074116,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":685425,"timestamp":149101884200,"id":82,"parentId":44,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":696862,"timestamp":149101872811,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778957074119,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":685716,"timestamp":149101884187,"id":81,"parentId":42,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":697566,"timestamp":149101872389,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778957074119,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":686957,"timestamp":149101884075,"id":76,"parentId":36,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":699692,"timestamp":149101871385,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778957074118,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":696215,"timestamp":149101880696,"id":64,"parentId":21,"tags":{},"startTime":1778957074127,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":712455,"timestamp":149101864495,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778957074111,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":692974,"timestamp":149101884247,"id":85,"parentId":47,"tags":{},"startTime":1778957074131,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":704094,"timestamp":149101873173,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778957074119,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":700556,"timestamp":149101884232,"id":84,"parentId":46,"tags":{},"startTime":1778957074131,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":711777,"timestamp":149101873061,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778957074119,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":705352,"timestamp":149101884278,"id":87,"parentId":49,"tags":{},"startTime":1778957074131,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":716275,"timestamp":149101873401,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778957074120,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":705759,"timestamp":149101884294,"id":88,"parentId":50,"tags":{},"startTime":1778957074131,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":714729,"timestamp":149101875367,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778957074122,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":707998,"timestamp":149101884143,"id":78,"parentId":38,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":720467,"timestamp":149101871715,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778957074118,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":715261,"timestamp":149101884216,"id":83,"parentId":45,"tags":{},"startTime":1778957074130,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":726583,"timestamp":149101872938,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778957074119,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":710497,"timestamp":149101889317,"id":90,"parentId":24,"tags":{},"startTime":1778957074136,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":733220,"timestamp":149101866641,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778957074113,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":709580,"timestamp":149101890473,"id":91,"parentId":31,"tags":{},"startTime":1778957074137,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":729907,"timestamp":149101870182,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778957074116,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":711840,"timestamp":149101892733,"id":93,"parentId":43,"tags":{},"startTime":1778957074139,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":732087,"timestamp":149101872527,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778957074119,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":724296,"timestamp":149101882944,"id":68,"parentId":27,"tags":{},"startTime":1778957074129,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":737663,"timestamp":149101869620,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778957074116,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":734581,"timestamp":149101884306,"id":89,"parentId":51,"tags":{},"startTime":1778957074131,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":743468,"timestamp":149101875474,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778957074122,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":730252,"timestamp":149101891314,"id":92,"parentId":41,"tags":{},"startTime":1778957074138,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":749501,"timestamp":149101872109,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778957074118,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":779162,"timestamp":149101894936,"id":94,"parentId":23,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":807766,"timestamp":149101866406,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778957074113,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":787893,"timestamp":149101895038,"id":99,"parentId":56,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":806716,"timestamp":149101876311,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778957074123,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":802430,"timestamp":149101881286,"id":66,"parentId":25,"tags":{},"startTime":1778957074128,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":814467,"timestamp":149101869317,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778957074116,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":790639,"timestamp":149101895024,"id":98,"parentId":55,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":809543,"timestamp":149101876170,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778957074122,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":801635,"timestamp":149101884259,"id":86,"parentId":48,"tags":{},"startTime":1778957074131,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":812680,"timestamp":149101873273,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778957074120,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":792673,"timestamp":149101894966,"id":95,"parentId":52,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":811886,"timestamp":149101875793,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778957074122,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":796545,"timestamp":149101895050,"id":100,"parentId":58,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":814781,"timestamp":149101876874,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778957074123,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":796843,"timestamp":149101894992,"id":97,"parentId":54,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":815843,"timestamp":149101876028,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778957074122,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":798874,"timestamp":149101895187,"id":102,"parentId":61,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":816585,"timestamp":149101877516,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778957074124,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":800085,"timestamp":149101895208,"id":104,"parentId":63,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":817601,"timestamp":149101877731,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778957074124,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":794135,"timestamp":149101903241,"id":105,"parentId":60,"tags":{},"startTime":1778957074150,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":820228,"timestamp":149101877189,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778957074123,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":785083,"timestamp":149101914735,"id":106,"parentId":57,"tags":{},"startTime":1778957074161,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":823374,"timestamp":149101876478,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778957074123,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":805379,"timestamp":149101895200,"id":103,"parentId":62,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":822971,"timestamp":149101877633,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778957074124,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":815544,"timestamp":149101894982,"id":96,"parentId":53,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":834666,"timestamp":149101875904,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778957074122,"traceId":"10f5ede51c9a4adc"},{"name":"is-page-static","duration":849132,"timestamp":149101895160,"id":101,"parentId":59,"tags":{},"startTime":1778957074141,"traceId":"10f5ede51c9a4adc"},{"name":"check-page","duration":867300,"timestamp":149101877058,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778957074123,"traceId":"10f5ede51c9a4adc"},{"name":"static-check","duration":882092,"timestamp":149101862310,"id":19,"parentId":1,"tags":{},"startTime":1778957074109,"traceId":"10f5ede51c9a4adc"}]
2
+ [{"name":"write-routes-manifest","duration":512,"timestamp":149102753133,"id":108,"parentId":1,"tags":{},"startTime":1778957074999,"traceId":"10f5ede51c9a4adc"},{"name":"load-dotenv","duration":61,"timestamp":149102767648,"id":111,"parentId":110,"tags":{},"startTime":1778957075014,"traceId":"10f5ede51c9a4adc"},{"name":"run-export-path-map","duration":707,"timestamp":149102770975,"id":112,"parentId":110,"tags":{},"startTime":1778957075017,"traceId":"10f5ede51c9a4adc"},{"name":"next-export","duration":631918,"timestamp":149102765801,"id":110,"parentId":1,"tags":{},"startTime":1778957075012,"traceId":"10f5ede51c9a4adc"},{"name":"move-exported-app-not-found-","duration":541,"timestamp":149103401358,"id":113,"parentId":109,"tags":{},"startTime":1778957075648,"traceId":"10f5ede51c9a4adc"},{"name":"move-exported-app-global-error-","duration":436,"timestamp":149103401987,"id":114,"parentId":109,"tags":{},"startTime":1778957075648,"traceId":"10f5ede51c9a4adc"},{"name":"static-generation","duration":645048,"timestamp":149102759340,"id":109,"parentId":1,"tags":{},"startTime":1778957075006,"traceId":"10f5ede51c9a4adc"},{"name":"write-routes-manifest","duration":469,"timestamp":149103404638,"id":115,"parentId":1,"tags":{},"startTime":1778957075651,"traceId":"10f5ede51c9a4adc"},{"name":"print-tree-view","duration":4453,"timestamp":149103424062,"id":116,"parentId":1,"tags":{},"startTime":1778957075670,"traceId":"10f5ede51c9a4adc"},{"name":"write-route-bundle-stats","duration":14873,"timestamp":149103428555,"id":117,"parentId":1,"tags":{},"startTime":1778957075675,"traceId":"10f5ede51c9a4adc"},{"name":"telemetry-flush","duration":18208,"timestamp":149103443465,"id":118,"parentId":1,"tags":{},"startTime":1778957075690,"traceId":"10f5ede51c9a4adc"},{"name":"next-build","duration":17964978,"timestamp":149085496736,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778957057743,"traceId":"10f5ede51c9a4adc"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6261490,"timestamp":148420660916,"id":14,"parentId":1,"tags":{},"startTime":1778956392907,"traceId":"6ea5bea33df7190e"},{"name":"turbopack-build-events","duration":101,"timestamp":148420954988,"id":15,"parentId":1,"tags":{},"startTime":1778956393201,"traceId":"6ea5bea33df7190e"},{"name":"run-typescript","duration":10107470,"timestamp":148426936670,"id":16,"parentId":1,"tags":{},"startTime":1778956399183,"traceId":"6ea5bea33df7190e"},{"name":"static-check","duration":843134,"timestamp":148437234021,"id":19,"parentId":1,"tags":{},"startTime":1778956409480,"traceId":"6ea5bea33df7190e"},{"name":"static-generation","duration":637968,"timestamp":148438091279,"id":109,"parentId":1,"tags":{},"startTime":1778956410338,"traceId":"6ea5bea33df7190e"},{"name":"telemetry-flush","duration":29605,"timestamp":148438766830,"id":118,"parentId":1,"tags":{},"startTime":1778956411013,"traceId":"6ea5bea33df7190e"},{"name":"next-build","duration":18377551,"timestamp":148420418917,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778956392665,"traceId":"6ea5bea33df7190e"}]
1
+ [{"name":"run-turbopack","duration":5729677,"timestamp":149085737815,"id":14,"parentId":1,"tags":{},"startTime":1778957057984,"traceId":"10f5ede51c9a4adc"},{"name":"turbopack-build-events","duration":117,"timestamp":149086053692,"id":15,"parentId":1,"tags":{},"startTime":1778957058300,"traceId":"10f5ede51c9a4adc"},{"name":"run-typescript","duration":10212081,"timestamp":149091477687,"id":16,"parentId":1,"tags":{},"startTime":1778957063724,"traceId":"10f5ede51c9a4adc"},{"name":"static-check","duration":882092,"timestamp":149101862310,"id":19,"parentId":1,"tags":{},"startTime":1778957074109,"traceId":"10f5ede51c9a4adc"},{"name":"static-generation","duration":645048,"timestamp":149102759340,"id":109,"parentId":1,"tags":{},"startTime":1778957075006,"traceId":"10f5ede51c9a4adc"},{"name":"telemetry-flush","duration":18208,"timestamp":149103443465,"id":118,"parentId":1,"tags":{},"startTime":1778957075690,"traceId":"10f5ede51c9a4adc"},{"name":"next-build","duration":17964978,"timestamp":149085496736,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778957057743,"traceId":"10f5ede51c9a4adc"}]
@@ -2027,11 +2027,37 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2027
2027
  7th surface in the info-density tabular-nums
2028
2028
  sweep — and the first on the HTML side
2029
2029
  (previous 6 were SVG <text>/<tspan>). */
2030
- className={`tabular-nums font-medium px-2.5 py-1 rounded-md border anet-topo-chip-focus transition-colors duration-200 ${
2030
+ /* Round 398 / Loop: chip-row chips gain hover translateY
2031
+ (-1px) lift on the CLICKABLE variant only (workingCount
2032
+ > 0 here / onlineNodes.length > 0 below / activeLinks
2033
+ > 0 deeper). Pre-R398 the chips brightened bg + border
2034
+ on hover (R201) but didn't lift — only their clickable
2035
+ siblings (filter pin pills R397, recent rows R143,
2036
+ legend rows R144) acknowledged cursor entry with a
2037
+ translate-y. R398 closes the chip-row by extending
2038
+ the same gesture to the static header chips, gated
2039
+ on the clickable role so empty chips (which have
2040
+ no role="button") stay planted at their R205
2041
+ opacity-50 receded paint. transition-transform
2042
+ + duration-200 + ease-out + transform-gpu added
2043
+ alongside existing transition-colors so the lift
2044
+ and the color tween share rhythm.
2045
+ Gesture-vocabulary table (post-R398):
2046
+ recent-signal row -1 px (R143)
2047
+ legend row -1 px (R144)
2048
+ group cluster box fill+sw lift (R142)
2049
+ filter pin pills -1 px (R397)
2050
+ chip-row chips -1 px (R398, this round)
2051
+ Empty chips: no lift. Pin-mirror chips: no
2052
+ conflict (R180 inset double-ring is a box-shadow
2053
+ not a transform). new data-chip-hover-lift attr
2054
+ surfaces the lift surface for tests. */
2055
+ className={`tabular-nums font-medium px-2.5 py-1 rounded-md border anet-topo-chip-focus transition-colors transition-transform duration-200 ease-out transform-gpu ${
2031
2056
  workingCount > 0
2032
- ? 'bg-green-500/10 text-green-300 border-green-500/20 hover:bg-green-500/15 hover:border-green-500/30'
2057
+ ? 'bg-green-500/10 text-green-300 border-green-500/20 hover:bg-green-500/15 hover:border-green-500/30 hover:-translate-y-px'
2033
2058
  : 'bg-green-500/10 text-green-300 border-green-500/20'
2034
2059
  }`}
2060
+ data-chip-hover-lift={workingCount > 0 ? 'true' : 'false'}
2035
2061
  data-working-chip
2036
2062
  data-working-chip-aliases={workingAliases.join(',')}
2037
2063
  data-pin-mirror={pinnedStatus === 'working' ? 'true' : 'false'}
@@ -2125,11 +2151,13 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2125
2151
  /* Round 232 / Loop: tabular-nums on online chip
2126
2152
  (sibling treatment to working chip — same row,
2127
2153
  same digit-jitter physics on count crossings). */
2128
- className={`tabular-nums font-medium px-2.5 py-1 rounded-md border anet-topo-chip-focus transition-colors duration-200 ${
2154
+ // R398: hover translate-y lift on clickable variant see working chip above.
2155
+ className={`tabular-nums font-medium px-2.5 py-1 rounded-md border anet-topo-chip-focus transition-colors transition-transform duration-200 ease-out transform-gpu ${
2129
2156
  onlineNodes.length > 0
2130
- ? 'bg-cyan-500/10 text-cyan-300 border-cyan-500/20 hover:bg-cyan-500/15 hover:border-cyan-500/30'
2157
+ ? 'bg-cyan-500/10 text-cyan-300 border-cyan-500/20 hover:bg-cyan-500/15 hover:border-cyan-500/30 hover:-translate-y-px'
2131
2158
  : 'bg-cyan-500/10 text-cyan-300 border-cyan-500/20'
2132
2159
  }`}
2160
+ data-chip-hover-lift={onlineNodes.length > 0 ? 'true' : 'false'}
2133
2161
  data-online-chip
2134
2162
  data-online-chip-aliases={onlineAliases.join(',')}
2135
2163
  data-pin-mirror={pinnedStatus === 'idle' ? 'true' : 'false'}
@@ -2400,7 +2428,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2400
2428
  // R355: `group` lets the inner opacity-70 spans (prefix
2401
2429
  // `filter:` + count `· N`) brighten to 100 % on pill hover.
2402
2430
  // Sibling treatment on group + vendor pills below.
2403
- className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2431
+ className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus transition-transform duration-200 ease-out hover:-translate-y-px transform-gpu" data-topo-filter-pill-hover-lift="true"
2404
2432
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear filter'}
2405
2433
  onClick={() => setPinnedStatus(null)}
2406
2434
  style={{
@@ -2453,7 +2481,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2453
2481
  data-filter-match-count={matchCount}
2454
2482
  data-filter-match-aliases={matchAliases.join(',')}
2455
2483
  // R355 sibling — `group` parent + group-hover on inner spans.
2456
- className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2484
+ className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus transition-transform duration-200 ease-out hover:-translate-y-px transform-gpu" data-topo-filter-pill-hover-lift="true"
2457
2485
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear filter'}
2458
2486
  onClick={() => setPinnedGroup(null)}
2459
2487
  style={{
@@ -2518,7 +2546,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2518
2546
  data-filter-match-count={matchCount}
2519
2547
  data-filter-match-aliases={matchAliases.join(',')}
2520
2548
  // R355 sibling — `group` parent + group-hover on inner spans.
2521
- className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2549
+ className="group inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus transition-transform duration-200 ease-out hover:-translate-y-px transform-gpu" data-topo-filter-pill-hover-lift="true"
2522
2550
  title={matchCount > 0 ? `${matchPreview}${matchSuffix} — click to clear` : 'Click to clear vendor filter'}
2523
2551
  onClick={() => setPinnedVendor(null)}
2524
2552
  style={{
@@ -2580,7 +2608,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2580
2608
  data-filter-match-count={link.count}
2581
2609
  data-filter-match-aliases={`${link.from},${link.to}`}
2582
2610
  data-active-filter-edge-hot={isHot ? 'true' : 'false'}
2583
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus"
2611
+ className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono font-medium text-xs border anet-fade-in anet-topo-chip-focus transition-transform duration-200 ease-out hover:-translate-y-px transform-gpu" data-topo-filter-pill-hover-lift="true"
2584
2612
  title={`${link.from} → ${link.to} (${link.count} msg${link.count === 1 ? '' : 's'}${isHot ? ', hot lane · ≥ 10' : ''}) — click to clear`}
2585
2613
  onClick={() => setPinnedEdgeKey(null)}
2586
2614
  style={{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.57",
3
+ "version": "0.5.1-preview.59",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,95 @@
1
+ /* Round 398 verification: chip-row chips (working / online) gain
2
+ * hover translateY(-1px) lift on clickable variant only. Extends
3
+ * R397's filter-pill lift to the static header chips, gated to
4
+ * the chip's clickable role so empty chips stay planted.
5
+ *
6
+ * Contract:
7
+ * - Populated working chip (workingCount > 0):
8
+ * * data-chip-hover-lift === 'true'
9
+ * * className includes 'hover:-translate-y-px'
10
+ * * className includes 'transition-transform' + 'transform-gpu'
11
+ * - Populated online chip (onlineNodes.length > 0):
12
+ * * data-chip-hover-lift === 'true'
13
+ * * className includes 'hover:-translate-y-px'
14
+ * - Pre-R398 invariants preserved:
15
+ * * transition-colors duration-200 still present
16
+ * * R201 hover:bg + hover:border tokens still present
17
+ * * anet-topo-chip-focus + tabular-nums + font-medium present
18
+ */
19
+ import { chromium } from 'playwright';
20
+ import { readFileSync } from 'node:fs';
21
+
22
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
23
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
24
+
25
+ const browser = await chromium.launch({ headless: true });
26
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
27
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
28
+ await ctx.addInitScript(() => {
29
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
30
+ });
31
+ await ctx.route('**/api/hub/status*', async (route) => {
32
+ const r = await route.fetch();
33
+ const b = await r.json();
34
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
35
+ const mk = (alias, status) => ({
36
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
37
+ network_id: nid, project_dir: null,
38
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
39
+ });
40
+ await route.fulfill({ response: r, json: { ...b, sessions: [
41
+ mk('alpha', 'working'),
42
+ mk('beta', 'idle'),
43
+ mk('gamma', 'idle'),
44
+ ] } });
45
+ });
46
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
47
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
48
+
49
+ const page = await ctx.newPage();
50
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
51
+ await page.waitForSelector('[data-working-chip]', { timeout: 15000 });
52
+ await page.waitForTimeout(400);
53
+
54
+ const probe = await page.evaluate(() => {
55
+ const work = document.querySelector('[data-working-chip]');
56
+ const online = document.querySelector('[data-online-chip]');
57
+ return {
58
+ work: work ? {
59
+ className: work.className,
60
+ lift: work.getAttribute('data-chip-hover-lift'),
61
+ clickable: work.getAttribute('data-working-chip-clickable'),
62
+ } : null,
63
+ online: online ? {
64
+ className: online.className,
65
+ lift: online.getAttribute('data-chip-hover-lift'),
66
+ clickable: online.getAttribute('data-online-chip-clickable'),
67
+ } : null,
68
+ };
69
+ });
70
+
71
+ await browser.close();
72
+
73
+ const wc = probe.work?.className || '';
74
+ const oc = probe.online?.className || '';
75
+ const results = {
76
+ // working chip: clickable + R398 lift attrs + className tokens
77
+ work_lift_true: probe.work?.lift === 'true',
78
+ work_clickable_true: probe.work?.clickable === 'true',
79
+ work_has_hover_translate: wc.includes('hover:-translate-y-px'),
80
+ work_has_transition_transform: wc.includes('transition-transform'),
81
+ work_has_transform_gpu: wc.includes('transform-gpu'),
82
+ work_has_transition_colors: wc.includes('transition-colors'), // R201 preserved
83
+ work_has_hover_bg: wc.includes('hover:bg-green-500/15'), // R201 preserved
84
+ work_has_chip_focus: wc.includes('anet-topo-chip-focus'),
85
+ // online chip mirror
86
+ online_lift_true: probe.online?.lift === 'true',
87
+ online_clickable_true: probe.online?.clickable === 'true',
88
+ online_has_hover_translate: oc.includes('hover:-translate-y-px'),
89
+ online_has_transition_transform: oc.includes('transition-transform'),
90
+ };
91
+ const ok = Object.values(results).every(Boolean);
92
+ console.log(`${ok ? '✅' : '❌'} chip-row chips hover lift translateY(-1px):`, JSON.stringify(results),
93
+ '\n workingClass:', wc,
94
+ '\n onlineClass: ', oc);
95
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,101 @@
1
+ /* Round 397 verification: filter pin pills gain hover lift
2
+ * translateY(-1px). Sibling to R143 recent-row lift idiom —
3
+ * extends the "rising on hover" gesture from SVG canvas surfaces
4
+ * to the HTML filter chip strip. All 4 filter pill variants
5
+ * (status / group / vendor / edge) carry the lift.
6
+ *
7
+ * Contract:
8
+ * - Source-file verification of the new className tokens
9
+ * (transition-transform + hover:-translate-y-px + transform-gpu)
10
+ * - The data-topo-filter-pill-hover-lift="true" sentinel attr
11
+ * is mounted when any filter pill is rendered (pinned filter
12
+ * present). Test mounts a status filter by clicking a status
13
+ * chip, then probes the resulting pill.
14
+ * - Pre-R397 invariants preserved on the pill className:
15
+ * * group / rounded-md / font-mono / font-medium / text-xs
16
+ * / border / anet-fade-in / anet-topo-chip-focus
17
+ *
18
+ * Note: hover dispatch on HTML chips in headless can fire but
19
+ * computing the post-hover translate-y reliably requires a mouse
20
+ * sweep. Test asserts the className tokens are present (which
21
+ * is what Tailwind compiles into `:hover` CSS) plus the sentinel
22
+ * attr — both deterministic from source.
23
+ */
24
+ import { chromium } from 'playwright';
25
+ import { readFileSync } from 'node:fs';
26
+
27
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
28
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
29
+
30
+ const browser = await chromium.launch({ headless: true });
31
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
32
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
33
+ await ctx.addInitScript(() => {
34
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } 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, status) => ({
41
+ alias, status, 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: [
46
+ mk('alpha', 'working'),
47
+ mk('beta', 'idle'),
48
+ mk('gamma', 'idle'),
49
+ ] } });
50
+ });
51
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
52
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
53
+
54
+ const page = await ctx.newPage();
55
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
56
+ await page.waitForSelector('g[data-node]', { timeout: 15000 });
57
+ await page.waitForTimeout(400);
58
+
59
+ // Click a legend status row to pin the status filter → mounts the
60
+ // filter pill. Use the alpha node since `working` row exists in fixture.
61
+ await page.click('[data-legend-status="working"]');
62
+ await page.waitForSelector('[data-topo-filter-pill-hover-lift="true"]', { timeout: 5000 });
63
+
64
+ const probe = await page.evaluate(() => {
65
+ const pill = document.querySelector('[data-topo-filter-pill-hover-lift="true"]');
66
+ return pill ? {
67
+ className: pill.className,
68
+ activeFilter: pill.getAttribute('data-active-filter'),
69
+ } : null;
70
+ });
71
+
72
+ const fileText = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
73
+ const occurrences = (fileText.match(/hover:-translate-y-px/g) || []).length;
74
+ const sentinelOccurrences = (fileText.match(/data-topo-filter-pill-hover-lift="true"/g) || []).length;
75
+
76
+ await browser.close();
77
+
78
+ const cls = probe?.className || '';
79
+ const results = {
80
+ // Sentinel attr mounted on the filter pill
81
+ pill_mounted: !!probe,
82
+ // R397: hover-lift tokens present in className
83
+ has_transition_transform: cls.includes('transition-transform'),
84
+ has_hover_translate: cls.includes('hover:-translate-y-px'),
85
+ has_transform_gpu: cls.includes('transform-gpu'),
86
+ has_duration_200: cls.includes('duration-200'),
87
+ has_ease_out: cls.includes('ease-out'),
88
+ // Pre-R397 className tokens preserved
89
+ has_rounded_md: cls.includes('rounded-md'),
90
+ has_font_mono: cls.includes('font-mono'),
91
+ has_anet_topo_chip_focus: cls.includes('anet-topo-chip-focus'),
92
+ // Source-file replace_all coverage: 3 "group ..." pills + 1 plain pill = 4 occurrences
93
+ source_4_pills_lifted: occurrences === 4,
94
+ source_4_sentinels: sentinelOccurrences === 4,
95
+ };
96
+ const ok = Object.values(results).every(Boolean);
97
+ console.log(`${ok ? '✅' : '❌'} filter pin pills hover lift translateY(-1px):`, JSON.stringify(results),
98
+ '\n className:', cls,
99
+ '\n activeFilter:', probe?.activeFilter,
100
+ '\n occurrences:', occurrences, '/ sentinels:', sentinelOccurrences);
101
+ process.exit(ok ? 0 : 1);