@sleep2agi/agent-network-dashboard 0.5.1-preview.10 → 0.5.1-preview.12

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 (154) 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 +6 -6
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  132. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  137. package/.next/server/middleware-build-manifest.js +3 -3
  138. package/.next/server/pages/404.html +2 -2
  139. package/.next/server/pages/500.html +1 -1
  140. package/.next/static/chunks/{0aauz~36q5n2a.css → 0rwo2q9_by3o-.css} +1 -1
  141. package/.next/static/chunks/{0lpe~8qw.tb2-.js → 122abdjq6gm8i.js} +4 -4
  142. package/.next/static/chunks/156q5y0rq19h5.js +1 -0
  143. package/.next/static/chunks/163kbbv9y-8_7.js +1 -0
  144. package/.next/trace +2 -2
  145. package/.next/trace-build +1 -1
  146. package/app/components/TopoGraph.tsx +50 -5
  147. package/package.json +1 -1
  148. package/scripts/topo-layout-toggle-hover-tracking-test.mjs +109 -0
  149. package/scripts/topo-reset-hover-rotate-test.mjs +102 -0
  150. package/.next/static/chunks/0jwtl1a1lwyp5.js +0 -1
  151. package/.next/static/chunks/0sl9zcww9om1e.js +0 -1
  152. /package/.next/static/{O8CVuAcu03lV_emn4fTFW → xhrrmtOS6EmcuOXkSdTGX}/_buildManifest.js +0 -0
  153. /package/.next/static/{O8CVuAcu03lV_emn4fTFW → xhrrmtOS6EmcuOXkSdTGX}/_clientMiddlewareManifest.js +0 -0
  154. /package/.next/static/{O8CVuAcu03lV_emn4fTFW → xhrrmtOS6EmcuOXkSdTGX}/_ssgManifest.js +0 -0
@@ -0,0 +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.11"],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 →"})]})]})]})]})]})}])}]);
@@ -0,0 +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.11"],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":245,"timestamp":132804720352,"id":4,"parentId":1,"tags":{},"startTime":1778940776967,"traceId":"70171d193e8b9bcb"},{"name":"load-custom-routes","duration":471,"timestamp":132804720750,"id":5,"parentId":1,"tags":{},"startTime":1778940776967,"traceId":"70171d193e8b9bcb"},{"name":"create-dist-dir","duration":654,"timestamp":132804721264,"id":6,"parentId":1,"tags":{},"startTime":1778940776968,"traceId":"70171d193e8b9bcb"},{"name":"clean","duration":31816,"timestamp":132804722590,"id":7,"parentId":1,"tags":{},"startTime":1778940776969,"traceId":"70171d193e8b9bcb"},{"name":"discover-routes","duration":10352,"timestamp":132804836122,"id":8,"parentId":1,"tags":{},"startTime":1778940777082,"traceId":"70171d193e8b9bcb"},{"name":"create-root-mapping","duration":169,"timestamp":132804846547,"id":9,"parentId":1,"tags":{},"startTime":1778940777093,"traceId":"70171d193e8b9bcb"},{"name":"generate-route-types","duration":20589,"timestamp":132804850281,"id":10,"parentId":1,"tags":{},"startTime":1778940777097,"traceId":"70171d193e8b9bcb"},{"name":"public-dir-conflict-check","duration":113,"timestamp":132804870952,"id":11,"parentId":1,"tags":{},"startTime":1778940777117,"traceId":"70171d193e8b9bcb"},{"name":"generate-routes-manifest","duration":4973,"timestamp":132804871175,"id":12,"parentId":1,"tags":{},"startTime":1778940777117,"traceId":"70171d193e8b9bcb"},{"name":"run-turbopack","duration":6177386,"timestamp":132804894789,"id":14,"parentId":1,"tags":{},"startTime":1778940777141,"traceId":"70171d193e8b9bcb"},{"name":"turbopack-build-events","duration":126,"timestamp":132805191940,"id":15,"parentId":1,"tags":{},"startTime":1778940777438,"traceId":"70171d193e8b9bcb"},{"name":"run-typescript","duration":9585686,"timestamp":132811081059,"id":16,"parentId":1,"tags":{},"startTime":1778940783327,"traceId":"70171d193e8b9bcb"},{"name":"generate-required-server-files","duration":2220,"timestamp":132820668042,"id":18,"parentId":1,"tags":{},"startTime":1778940792914,"traceId":"70171d193e8b9bcb"},{"name":"check-static-error-page","duration":12031,"timestamp":132820826819,"id":20,"parentId":19,"tags":{},"startTime":1778940793073,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":436129,"timestamp":132820841164,"id":65,"parentId":22,"tags":{},"startTime":1778940793087,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":448173,"timestamp":132820829287,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778940793076,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":552310,"timestamp":132820844446,"id":71,"parentId":30,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":564562,"timestamp":132820832314,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":557584,"timestamp":132820844501,"id":72,"parentId":32,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":569551,"timestamp":132820832603,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":604650,"timestamp":132820843708,"id":67,"parentId":26,"tags":{},"startTime":1778940793090,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":616508,"timestamp":132820831929,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":606611,"timestamp":132820844646,"id":73,"parentId":33,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":618621,"timestamp":132820832700,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":609275,"timestamp":132820843876,"id":68,"parentId":27,"tags":{},"startTime":1778940793090,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":621309,"timestamp":132820832027,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":609606,"timestamp":132820844711,"id":74,"parentId":34,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":621583,"timestamp":132820832795,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":616672,"timestamp":132820844763,"id":76,"parentId":36,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":628446,"timestamp":132820833233,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":621301,"timestamp":132820844746,"id":75,"parentId":35,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":633220,"timestamp":132820832891,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":645127,"timestamp":132820843997,"id":69,"parentId":28,"tags":{},"startTime":1778940793090,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":658223,"timestamp":132820832123,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":645824,"timestamp":132820844787,"id":77,"parentId":37,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":657285,"timestamp":132820833364,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":646021,"timestamp":132820844809,"id":79,"parentId":39,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":657327,"timestamp":132820833538,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":663530,"timestamp":132820842803,"id":66,"parentId":25,"tags":{},"startTime":1778940793089,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":674624,"timestamp":132820831779,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":678374,"timestamp":132820844832,"id":81,"parentId":42,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":689418,"timestamp":132820833886,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":682483,"timestamp":132820844287,"id":70,"parentId":29,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":694633,"timestamp":132820832206,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778940793078,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":682418,"timestamp":132820844851,"id":83,"parentId":45,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":693009,"timestamp":132820834302,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":688633,"timestamp":132820844820,"id":80,"parentId":40,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":699911,"timestamp":132820833609,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":696463,"timestamp":132820840748,"id":64,"parentId":21,"tags":{},"startTime":1778940793087,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":709128,"timestamp":132820828130,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778940793074,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":692516,"timestamp":132820844883,"id":86,"parentId":48,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":702908,"timestamp":132820834521,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":692927,"timestamp":132820844840,"id":82,"parentId":44,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":703599,"timestamp":132820834213,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":715188,"timestamp":132820844797,"id":78,"parentId":38,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":726606,"timestamp":132820833457,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":715390,"timestamp":132820844914,"id":89,"parentId":51,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":724300,"timestamp":132820836043,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778940793082,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":715829,"timestamp":132820844865,"id":84,"parentId":46,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":726376,"timestamp":132820834370,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":716014,"timestamp":132820844895,"id":87,"parentId":49,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":726325,"timestamp":132820834616,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":710003,"timestamp":132820851112,"id":90,"parentId":24,"tags":{},"startTime":1778940793097,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":731453,"timestamp":132820829694,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778940793076,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":719148,"timestamp":132820844872,"id":85,"parentId":47,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":729622,"timestamp":132820834447,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778940793081,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":711328,"timestamp":132820855249,"id":93,"parentId":43,"tags":{},"startTime":1778940793102,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":732641,"timestamp":132820833983,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":718462,"timestamp":132820852335,"id":91,"parentId":31,"tags":{},"startTime":1778940793099,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":738450,"timestamp":132820832396,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778940793079,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":729519,"timestamp":132820853205,"id":92,"parentId":41,"tags":{},"startTime":1778940793099,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":749119,"timestamp":132820833672,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778940793080,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":766178,"timestamp":132820844906,"id":88,"parentId":50,"tags":{},"startTime":1778940793091,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":775255,"timestamp":132820835900,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778940793082,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":761771,"timestamp":132820857596,"id":100,"parentId":58,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":781647,"timestamp":132820837779,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":766861,"timestamp":132820857569,"id":98,"parentId":55,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":787453,"timestamp":132820837038,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":769261,"timestamp":132820857712,"id":101,"parentId":59,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":789135,"timestamp":132820837932,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":770196,"timestamp":132820857500,"id":94,"parentId":23,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":798241,"timestamp":132820829510,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778940793076,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":772731,"timestamp":132820857530,"id":95,"parentId":52,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":793881,"timestamp":132820836425,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":772909,"timestamp":132820857546,"id":96,"parentId":53,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":793878,"timestamp":132820836609,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":772917,"timestamp":132820857747,"id":102,"parentId":61,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":792325,"timestamp":132820838377,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778940793085,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":778196,"timestamp":132820857773,"id":104,"parentId":63,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":797432,"timestamp":132820838596,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778940793085,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":757246,"timestamp":132820880077,"id":106,"parentId":57,"tags":{},"startTime":1778940793126,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":799982,"timestamp":132820837379,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":770234,"timestamp":132820868273,"id":105,"parentId":60,"tags":{},"startTime":1778940793115,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":800462,"timestamp":132820838078,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778940793084,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":781722,"timestamp":132820857763,"id":103,"parentId":62,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":801019,"timestamp":132820838486,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778940793085,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":795257,"timestamp":132820857556,"id":97,"parentId":54,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":816053,"timestamp":132820836792,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"is-page-static","duration":799792,"timestamp":132820857582,"id":99,"parentId":56,"tags":{},"startTime":1778940793104,"traceId":"70171d193e8b9bcb"},{"name":"check-page","duration":820201,"timestamp":132820837205,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778940793083,"traceId":"70171d193e8b9bcb"},{"name":"static-check","duration":831878,"timestamp":132820825662,"id":19,"parentId":1,"tags":{},"startTime":1778940793072,"traceId":"70171d193e8b9bcb"}]
2
- [{"name":"write-routes-manifest","duration":536,"timestamp":132821665879,"id":108,"parentId":1,"tags":{},"startTime":1778940793912,"traceId":"70171d193e8b9bcb"},{"name":"load-dotenv","duration":44,"timestamp":132821679079,"id":111,"parentId":110,"tags":{},"startTime":1778940793925,"traceId":"70171d193e8b9bcb"},{"name":"run-export-path-map","duration":570,"timestamp":132821681805,"id":112,"parentId":110,"tags":{},"startTime":1778940793928,"traceId":"70171d193e8b9bcb"},{"name":"next-export","duration":571462,"timestamp":132821677898,"id":110,"parentId":1,"tags":{},"startTime":1778940793924,"traceId":"70171d193e8b9bcb"},{"name":"move-exported-app-not-found-","duration":560,"timestamp":132822253592,"id":113,"parentId":109,"tags":{},"startTime":1778940794500,"traceId":"70171d193e8b9bcb"},{"name":"move-exported-app-global-error-","duration":394,"timestamp":132822254246,"id":114,"parentId":109,"tags":{},"startTime":1778940794501,"traceId":"70171d193e8b9bcb"},{"name":"static-generation","duration":585693,"timestamp":132821671111,"id":109,"parentId":1,"tags":{},"startTime":1778940793917,"traceId":"70171d193e8b9bcb"},{"name":"write-routes-manifest","duration":376,"timestamp":132822257058,"id":115,"parentId":1,"tags":{},"startTime":1778940794503,"traceId":"70171d193e8b9bcb"},{"name":"print-tree-view","duration":3994,"timestamp":132822277787,"id":116,"parentId":1,"tags":{},"startTime":1778940794524,"traceId":"70171d193e8b9bcb"},{"name":"write-route-bundle-stats","duration":14733,"timestamp":132822281819,"id":117,"parentId":1,"tags":{},"startTime":1778940794528,"traceId":"70171d193e8b9bcb"},{"name":"telemetry-flush","duration":13499,"timestamp":132822296586,"id":118,"parentId":1,"tags":{},"startTime":1778940794543,"traceId":"70171d193e8b9bcb"},{"name":"next-build","duration":17641557,"timestamp":132804668556,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940776915,"traceId":"70171d193e8b9bcb"}]
1
+ [{"name":"generate-buildid","duration":305,"timestamp":133431701730,"id":4,"parentId":1,"tags":{},"startTime":1778941403948,"traceId":"5d109780091e5078"},{"name":"load-custom-routes","duration":535,"timestamp":133431702192,"id":5,"parentId":1,"tags":{},"startTime":1778941403948,"traceId":"5d109780091e5078"},{"name":"create-dist-dir","duration":816,"timestamp":133431702776,"id":6,"parentId":1,"tags":{},"startTime":1778941403949,"traceId":"5d109780091e5078"},{"name":"clean","duration":33340,"timestamp":133431704445,"id":7,"parentId":1,"tags":{},"startTime":1778941403951,"traceId":"5d109780091e5078"},{"name":"discover-routes","duration":14832,"timestamp":133431823690,"id":8,"parentId":1,"tags":{},"startTime":1778941404070,"traceId":"5d109780091e5078"},{"name":"create-root-mapping","duration":136,"timestamp":133431838589,"id":9,"parentId":1,"tags":{},"startTime":1778941404085,"traceId":"5d109780091e5078"},{"name":"generate-route-types","duration":36409,"timestamp":133431841315,"id":10,"parentId":1,"tags":{},"startTime":1778941404088,"traceId":"5d109780091e5078"},{"name":"public-dir-conflict-check","duration":168,"timestamp":133431877848,"id":11,"parentId":1,"tags":{},"startTime":1778941404124,"traceId":"5d109780091e5078"},{"name":"generate-routes-manifest","duration":6609,"timestamp":133431878225,"id":12,"parentId":1,"tags":{},"startTime":1778941404125,"traceId":"5d109780091e5078"},{"name":"run-turbopack","duration":6195004,"timestamp":133431890965,"id":14,"parentId":1,"tags":{},"startTime":1778941404137,"traceId":"5d109780091e5078"},{"name":"turbopack-build-events","duration":104,"timestamp":133432230407,"id":15,"parentId":1,"tags":{},"startTime":1778941404477,"traceId":"5d109780091e5078"},{"name":"run-typescript","duration":9849483,"timestamp":133438096943,"id":16,"parentId":1,"tags":{},"startTime":1778941410343,"traceId":"5d109780091e5078"},{"name":"generate-required-server-files","duration":2341,"timestamp":133447947609,"id":18,"parentId":1,"tags":{},"startTime":1778941420194,"traceId":"5d109780091e5078"},{"name":"check-static-error-page","duration":15913,"timestamp":133448165633,"id":20,"parentId":19,"tags":{},"startTime":1778941420412,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":567459,"timestamp":133448185652,"id":65,"parentId":22,"tags":{},"startTime":1778941420432,"traceId":"5d109780091e5078"},{"name":"check-page","duration":584830,"timestamp":133448168484,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778941420415,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":626767,"timestamp":133448185783,"id":66,"parentId":25,"tags":{},"startTime":1778941420432,"traceId":"5d109780091e5078"},{"name":"check-page","duration":640360,"timestamp":133448172449,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778941420419,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":632196,"timestamp":133448185887,"id":67,"parentId":26,"tags":{},"startTime":1778941420432,"traceId":"5d109780091e5078"},{"name":"check-page","duration":645526,"timestamp":133448172630,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778941420419,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":639997,"timestamp":133448185356,"id":64,"parentId":21,"tags":{},"startTime":1778941420432,"traceId":"5d109780091e5078"},{"name":"check-page","duration":658520,"timestamp":133448166907,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778941420413,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":638797,"timestamp":133448186800,"id":73,"parentId":33,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":650762,"timestamp":133448174876,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778941420421,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":660236,"timestamp":133448186912,"id":75,"parentId":35,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":674804,"timestamp":133448175175,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778941420421,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":673047,"timestamp":133448186412,"id":70,"parentId":29,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":685792,"timestamp":133448173764,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778941420420,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":685599,"timestamp":133448186928,"id":76,"parentId":36,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":696905,"timestamp":133448175705,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778941420422,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":687336,"timestamp":133448186133,"id":69,"parentId":28,"tags":{},"startTime":1778941420432,"traceId":"5d109780091e5078"},{"name":"check-page","duration":700671,"timestamp":133448172867,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778941420419,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":692623,"timestamp":133448186624,"id":72,"parentId":32,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":704573,"timestamp":133448174730,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778941420421,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":694229,"timestamp":133448186979,"id":79,"parentId":39,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":705233,"timestamp":133448176022,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778941420422,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":712470,"timestamp":133448186970,"id":78,"parentId":38,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":723566,"timestamp":133448175943,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778941420422,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":712714,"timestamp":133448186991,"id":80,"parentId":40,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":723633,"timestamp":133448176107,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778941420422,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":713870,"timestamp":133448186955,"id":77,"parentId":37,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":725021,"timestamp":133448175847,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778941420422,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":720513,"timestamp":133448187048,"id":83,"parentId":45,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":730817,"timestamp":133448176799,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778941420423,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":725383,"timestamp":133448187078,"id":85,"parentId":47,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":734274,"timestamp":133448178237,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778941420425,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":729782,"timestamp":133448186014,"id":68,"parentId":27,"tags":{},"startTime":1778941420432,"traceId":"5d109780091e5078"},{"name":"check-page","duration":743115,"timestamp":133448172753,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778941420419,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":730135,"timestamp":133448187086,"id":86,"parentId":48,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":738878,"timestamp":133448178407,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778941420425,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":731669,"timestamp":133448187064,"id":84,"parentId":46,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":741870,"timestamp":133448176901,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778941420423,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":734829,"timestamp":133448187100,"id":87,"parentId":49,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":743461,"timestamp":133448178513,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778941420425,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":735772,"timestamp":133448187112,"id":88,"parentId":50,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":744349,"timestamp":133448178574,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778941420425,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":735960,"timestamp":133448187121,"id":89,"parentId":51,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":744494,"timestamp":133448178623,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778941420425,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":739174,"timestamp":133448186561,"id":71,"parentId":30,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":751848,"timestamp":133448173936,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778941420420,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":739383,"timestamp":133448187034,"id":82,"parentId":44,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":749781,"timestamp":133448176676,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778941420423,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":735690,"timestamp":133448194524,"id":91,"parentId":31,"tags":{},"startTime":1778941420441,"traceId":"5d109780091e5078"},{"name":"check-page","duration":756025,"timestamp":133448174238,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778941420421,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":746970,"timestamp":133448186883,"id":74,"parentId":34,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":758867,"timestamp":133448175026,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778941420421,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":742397,"timestamp":133448195348,"id":92,"parentId":41,"tags":{},"startTime":1778941420442,"traceId":"5d109780091e5078"},{"name":"check-page","duration":761634,"timestamp":133448176169,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778941420422,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":742547,"timestamp":133448199755,"id":96,"parentId":53,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":763221,"timestamp":133448179119,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778941420425,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":750838,"timestamp":133448199778,"id":98,"parentId":55,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":771258,"timestamp":133448179400,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778941420426,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":767077,"timestamp":133448187020,"id":81,"parentId":42,"tags":{},"startTime":1778941420433,"traceId":"5d109780091e5078"},{"name":"check-page","duration":777773,"timestamp":133448176371,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778941420423,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":758333,"timestamp":133448199791,"id":99,"parentId":56,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":778676,"timestamp":133448179542,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778941420426,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":766587,"timestamp":133448199911,"id":101,"parentId":59,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":786226,"timestamp":133448180315,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778941420427,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":778892,"timestamp":133448193193,"id":90,"parentId":24,"tags":{},"startTime":1778941420439,"traceId":"5d109780091e5078"},{"name":"check-page","duration":803074,"timestamp":133448169083,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778941420415,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":775629,"timestamp":133448196866,"id":93,"parentId":43,"tags":{},"startTime":1778941420443,"traceId":"5d109780091e5078"},{"name":"check-page","duration":796070,"timestamp":133448176471,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778941420423,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":774505,"timestamp":133448199933,"id":102,"parentId":61,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":793556,"timestamp":133448180939,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778941420427,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":771328,"timestamp":133448210868,"id":105,"parentId":60,"tags":{},"startTime":1778941420457,"traceId":"5d109780091e5078"},{"name":"check-page","duration":801729,"timestamp":133448180515,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778941420427,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":765662,"timestamp":133448224101,"id":106,"parentId":57,"tags":{},"startTime":1778941420470,"traceId":"5d109780091e5078"},{"name":"check-page","duration":810106,"timestamp":133448179701,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778941420426,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":792135,"timestamp":133448199739,"id":95,"parentId":52,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":812960,"timestamp":133448178959,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778941420425,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":792573,"timestamp":133448199708,"id":94,"parentId":23,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":823505,"timestamp":133448168805,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778941420415,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":803851,"timestamp":133448199769,"id":97,"parentId":54,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":824413,"timestamp":133448179246,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778941420426,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":822859,"timestamp":133448199803,"id":100,"parentId":58,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":842595,"timestamp":133448180112,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778941420426,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":831035,"timestamp":133448199960,"id":104,"parentId":63,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":849783,"timestamp":133448181270,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778941420428,"traceId":"5d109780091e5078"},{"name":"is-page-static","duration":842692,"timestamp":133448199946,"id":103,"parentId":62,"tags":{},"startTime":1778941420446,"traceId":"5d109780091e5078"},{"name":"check-page","duration":861565,"timestamp":133448181115,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778941420427,"traceId":"5d109780091e5078"},{"name":"static-check","duration":878123,"timestamp":133448164592,"id":19,"parentId":1,"tags":{},"startTime":1778941420411,"traceId":"5d109780091e5078"}]
2
+ [{"name":"write-routes-manifest","duration":739,"timestamp":133449054949,"id":108,"parentId":1,"tags":{},"startTime":1778941421301,"traceId":"5d109780091e5078"},{"name":"load-dotenv","duration":43,"timestamp":133449067155,"id":111,"parentId":110,"tags":{},"startTime":1778941421313,"traceId":"5d109780091e5078"},{"name":"run-export-path-map","duration":556,"timestamp":133449070189,"id":112,"parentId":110,"tags":{},"startTime":1778941421316,"traceId":"5d109780091e5078"},{"name":"next-export","duration":581871,"timestamp":133449065936,"id":110,"parentId":1,"tags":{},"startTime":1778941421312,"traceId":"5d109780091e5078"},{"name":"move-exported-app-not-found-","duration":758,"timestamp":133449651773,"id":113,"parentId":109,"tags":{},"startTime":1778941421898,"traceId":"5d109780091e5078"},{"name":"move-exported-app-global-error-","duration":524,"timestamp":133449652667,"id":114,"parentId":109,"tags":{},"startTime":1778941421899,"traceId":"5d109780091e5078"},{"name":"static-generation","duration":595583,"timestamp":133449059986,"id":109,"parentId":1,"tags":{},"startTime":1778941421306,"traceId":"5d109780091e5078"},{"name":"write-routes-manifest","duration":492,"timestamp":133449655891,"id":115,"parentId":1,"tags":{},"startTime":1778941421902,"traceId":"5d109780091e5078"},{"name":"print-tree-view","duration":3722,"timestamp":133449675531,"id":116,"parentId":1,"tags":{},"startTime":1778941421922,"traceId":"5d109780091e5078"},{"name":"write-route-bundle-stats","duration":12387,"timestamp":133449679285,"id":117,"parentId":1,"tags":{},"startTime":1778941421926,"traceId":"5d109780091e5078"},{"name":"telemetry-flush","duration":20554,"timestamp":133449691700,"id":118,"parentId":1,"tags":{},"startTime":1778941421938,"traceId":"5d109780091e5078"},{"name":"next-build","duration":18068790,"timestamp":133431643499,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778941403890,"traceId":"5d109780091e5078"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6177386,"timestamp":132804894789,"id":14,"parentId":1,"tags":{},"startTime":1778940777141,"traceId":"70171d193e8b9bcb"},{"name":"turbopack-build-events","duration":126,"timestamp":132805191940,"id":15,"parentId":1,"tags":{},"startTime":1778940777438,"traceId":"70171d193e8b9bcb"},{"name":"run-typescript","duration":9585686,"timestamp":132811081059,"id":16,"parentId":1,"tags":{},"startTime":1778940783327,"traceId":"70171d193e8b9bcb"},{"name":"static-check","duration":831878,"timestamp":132820825662,"id":19,"parentId":1,"tags":{},"startTime":1778940793072,"traceId":"70171d193e8b9bcb"},{"name":"static-generation","duration":585693,"timestamp":132821671111,"id":109,"parentId":1,"tags":{},"startTime":1778940793917,"traceId":"70171d193e8b9bcb"},{"name":"telemetry-flush","duration":13499,"timestamp":132822296586,"id":118,"parentId":1,"tags":{},"startTime":1778940794543,"traceId":"70171d193e8b9bcb"},{"name":"next-build","duration":17641557,"timestamp":132804668556,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940776915,"traceId":"70171d193e8b9bcb"}]
1
+ [{"name":"run-turbopack","duration":6195004,"timestamp":133431890965,"id":14,"parentId":1,"tags":{},"startTime":1778941404137,"traceId":"5d109780091e5078"},{"name":"turbopack-build-events","duration":104,"timestamp":133432230407,"id":15,"parentId":1,"tags":{},"startTime":1778941404477,"traceId":"5d109780091e5078"},{"name":"run-typescript","duration":9849483,"timestamp":133438096943,"id":16,"parentId":1,"tags":{},"startTime":1778941410343,"traceId":"5d109780091e5078"},{"name":"static-check","duration":878123,"timestamp":133448164592,"id":19,"parentId":1,"tags":{},"startTime":1778941420411,"traceId":"5d109780091e5078"},{"name":"static-generation","duration":595583,"timestamp":133449059986,"id":109,"parentId":1,"tags":{},"startTime":1778941421306,"traceId":"5d109780091e5078"},{"name":"telemetry-flush","duration":20554,"timestamp":133449691700,"id":118,"parentId":1,"tags":{},"startTime":1778941421938,"traceId":"5d109780091e5078"},{"name":"next-build","duration":18068790,"timestamp":133431643499,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778941403890,"traceId":"5d109780091e5078"}]
@@ -1050,6 +1050,18 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1050
1050
  // 200ms ease-out joins the existing R264 color/border transition
1051
1051
  // list on the same span.
1052
1052
  const [hoveredZoomLevel, setHoveredZoomLevel] = useState(false);
1053
+ // Round 350 / Loop: reset-button icon hover-rotate preview of the
1054
+ // R184 click-spin. Pre-R350 hovering the reset button only changed
1055
+ // the button bg (white/5); the icon inside stayed perfectly still.
1056
+ // R350 nudges the icon -8° on hover — a tactile hint that this
1057
+ // button rotates the icon on click. When the click fires, the
1058
+ // R184 anet-reset-spin keyframe animation overrides the hover
1059
+ // transform for its 450 ms run (CSS animations win over transitions
1060
+ // on the same property); when the animation ends + React removes
1061
+ // the className, the inline transform eases back to whatever the
1062
+ // hover state says — either -8° (still hovering) or 0 (mouse left).
1063
+ // 350th-round milestone polish.
1064
+ const [hoveredReset, setHoveredReset] = useState(false);
1053
1065
  // R135: panel-wide hover-elevation. The recent-signal + legend
1054
1066
  // panels both already host clickable rows (R56/R116 recent rows,
1055
1067
  // R55/R61 legend rows) and a clickable footer (R133), so the
@@ -1850,7 +1862,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1850
1862
  weight; cyan-400/60 + ring-inset retained. The
1851
1863
  R163/R196 hover/active deeps + R249 chrome-pop
1852
1864
  click feedback continue unchanged. */
1853
- className={`px-2.5 py-1 transition-colors focus:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${layout === 'ring' ? 'bg-cyan-500/15 text-cyan-300 font-medium hover:bg-cyan-500/20 active:bg-cyan-500/25' : 'text-gray-400 hover:text-cyan-300 hover:bg-cyan-500/5 active:bg-cyan-500/15'} ${chromePopping === 'layout-ring' ? ' anet-chrome-pop' : ''}`}
1865
+ // R351: hover:tracking-wide extends the R344/R345/R347
1866
+ // hover-letter-spacing family to a 4th surface (chrome-
1867
+ // strip Ring/Grid pair). transition-colors className
1868
+ // dropped in favour of an inline transition spec that
1869
+ // bundles bg/color (150ms ease) + letter-spacing
1870
+ // (200ms ease-out) — Tailwind's transition-colors
1871
+ // doesn't list letter-spacing, so without this the
1872
+ // hover:tracking-wide would snap. Sibling change on
1873
+ // the Grid button below.
1874
+ className={`px-2.5 py-1 focus:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset hover:tracking-wide ${layout === 'ring' ? 'bg-cyan-500/15 text-cyan-300 font-medium hover:bg-cyan-500/20 active:bg-cyan-500/25' : 'text-gray-400 hover:text-cyan-300 hover:bg-cyan-500/5 active:bg-cyan-500/15'} ${chromePopping === 'layout-ring' ? ' anet-chrome-pop' : ''}`}
1875
+ style={{ transition: 'background-color 150ms ease, color 150ms ease, letter-spacing 200ms ease-out' }}
1854
1876
  >
1855
1877
  Ring
1856
1878
  </button>
@@ -1867,14 +1889,20 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1867
1889
  // Round 306 / Loop: focus-visible:ring-2 → ring-1 sibling
1868
1890
  // change to Ring above — unifies focus-ring width across
1869
1891
  // all chrome buttons.
1870
- className={`px-2.5 py-1 border-l transition-colors focus:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${layout === 'grid' ? 'bg-cyan-500/15 text-cyan-300 font-medium hover:bg-cyan-500/20 active:bg-cyan-500/25' : 'text-gray-400 hover:text-cyan-300 hover:bg-cyan-500/5 active:bg-cyan-500/15'} ${chromePopping === 'layout-grid' ? ' anet-chrome-pop' : ''}`}
1892
+ // R351 sibling — Grid button picks up hover:tracking-wide
1893
+ // + inline transition spec. Same vocabulary as Ring.
1894
+ className={`px-2.5 py-1 border-l focus:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset hover:tracking-wide ${layout === 'grid' ? 'bg-cyan-500/15 text-cyan-300 font-medium hover:bg-cyan-500/20 active:bg-cyan-500/25' : 'text-gray-400 hover:text-cyan-300 hover:bg-cyan-500/5 active:bg-cyan-500/15'} ${chromePopping === 'layout-grid' ? ' anet-chrome-pop' : ''}`}
1871
1895
  /* Round 268 / Loop: Grid button's left border (the
1872
1896
  internal divider between Ring and Grid) picks up
1873
1897
  pal.containerBorder, matching the wrapper change at
1874
1898
  line ~1460 and the chrome strip's segmented borders
1875
- (nodeSize, zoom). transition-colors className covers
1876
- the border-color eased on theme toggle. */
1877
- style={{ borderColor: pal.containerBorder }}
1899
+ (nodeSize, zoom). The R268 transition-colors className
1900
+ used to carry the border-color ease; R351 unfolds the
1901
+ transition list into the inline spec below so the
1902
+ letter-spacing tween rides alongside without snapping
1903
+ the border-color flip — border-color 200ms ease-out
1904
+ keeps R268's theme-toggle smoothness intact. */
1905
+ style={{ borderColor: pal.containerBorder, transition: 'background-color 150ms ease, color 150ms ease, border-color 200ms ease-out, letter-spacing 200ms ease-out' }}
1878
1906
  >
1879
1907
  Grid
1880
1908
  </button>
@@ -8244,6 +8272,12 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8244
8272
  onClick={() => { armResetSpin(); resetView(); }}
8245
8273
  data-topo-chrome-reset
8246
8274
  data-topo-chrome-reset-spinning={resetSpinning ? 'true' : 'false'}
8275
+ data-topo-chrome-reset-hover={hoveredReset ? 'true' : 'false'}
8276
+ // R350: hover state drives the icon transform below.
8277
+ onMouseEnter={() => setHoveredReset(true)}
8278
+ onMouseLeave={() => setHoveredReset(false)}
8279
+ onFocus={() => setHoveredReset(true)}
8280
+ onBlur={() => setHoveredReset(false)}
8247
8281
  // R196: press-state deepens before R184 reset-spin fires on
8248
8282
  // release — mouse-down dim then 450ms spin = full handshake.
8249
8283
  className="p-1.5 rounded-md border hover:bg-white/5 active:bg-white/10 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60"
@@ -8273,6 +8307,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8273
8307
  aria-hidden
8274
8308
  className={resetSpinning ? 'anet-reset-spin' : undefined}
8275
8309
  data-topo-chrome-reset-icon
8310
+ // R350: hover-rotate preview of the R184 click-spin.
8311
+ // Gated on !resetSpinning so the anet-reset-spin keyframe
8312
+ // owns transform during its 450ms run. transformOrigin
8313
+ // 'center' so rotation pivots around the icon's centre
8314
+ // (default would be top-left and the icon would arc).
8315
+ style={{
8316
+ transform: hoveredReset && !resetSpinning ? 'rotate(-8deg)' : 'rotate(0deg)',
8317
+ transformOrigin: 'center',
8318
+ transition: 'transform 200ms ease-out',
8319
+ }}
8320
+ data-topo-chrome-reset-icon-hover={hoveredReset && !resetSpinning ? 'true' : 'false'}
8276
8321
  >
8277
8322
  <path d="M3 12a9 9 0 1 0 9-9 9 9 0 0 0-6.4 2.6L3 8" />
8278
8323
  <path d="M3 3v5h5" />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.10",
3
+ "version": "0.5.1-preview.12",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,109 @@
1
+ /* Round 351 verification: Layout-toggle Ring|Grid buttons gain
2
+ * hover-state letter-spacing (Tailwind hover:tracking-wide =
3
+ * 0.025em). Extends the R344 (footer) / R345 (panel titles) /
4
+ * R347 (zoom-level readout) hover-letter-spacing family to a
5
+ * 4th surface — the chrome-strip Ring/Grid layout-toggle pair.
6
+ *
7
+ * Pure-CSS approach: no new React state. transition-colors
8
+ * className dropped in favour of an inline transition spec
9
+ * that bundles bg/color (150ms ease) + letter-spacing (200ms
10
+ * ease-out) so the tracking-wide hover doesn't snap. Grid
11
+ * button additionally keeps border-color in the transition
12
+ * list (R268 theme-ease).
13
+ *
14
+ * Contract (cyber):
15
+ * - Rest: both buttons computed letter-spacing === 'normal' (0).
16
+ * - Hover Ring: computed letter-spacing === '0.4px' (0.025em ×
17
+ * ~14-16 base font; we'll accept any value > 0.1px).
18
+ * - Hover Grid: same.
19
+ * - Inline transition on both contains 'letter-spacing'.
20
+ * - Pre-R351 invariants: data-topo-chrome-layout attrs intact,
21
+ * R268 border-color transition still present on Grid.
22
+ */
23
+ import { chromium } from 'playwright';
24
+ import { readFileSync } from 'node:fs';
25
+
26
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
27
+ const browser = await chromium.launch({ headless: true });
28
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
29
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
30
+ await ctx.addInitScript(() => {
31
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
32
+ });
33
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
34
+ await ctx.route('**/api/hub/status*', async (route) => {
35
+ const r = await route.fetch();
36
+ const b = await r.json();
37
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
38
+ const mk = (alias) => ({
39
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
40
+ network_id: nid, project_dir: null,
41
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
42
+ });
43
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('a'), mk('b'), mk('c') ] } });
44
+ });
45
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
46
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
47
+
48
+ const page = await ctx.newPage();
49
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
50
+ await page.waitForSelector('[data-topo-chrome-layout="ring"]', { timeout: 15000 });
51
+ await page.waitForSelector('[data-topo-chrome-layout="grid"]', { timeout: 5000 });
52
+ await page.waitForTimeout(300);
53
+
54
+ const restProbe = await page.evaluate(() => {
55
+ const r = document.querySelector('[data-topo-chrome-layout="ring"]');
56
+ const g = document.querySelector('[data-topo-chrome-layout="grid"]');
57
+ const rcs = r ? getComputedStyle(r) : null;
58
+ const gcs = g ? getComputedStyle(g) : null;
59
+ return {
60
+ ringLs: rcs?.letterSpacing ?? null,
61
+ ringTrans: rcs?.transition ?? null,
62
+ gridLs: gcs?.letterSpacing ?? null,
63
+ gridTrans: gcs?.transition ?? null,
64
+ };
65
+ });
66
+
67
+ // Hover Ring button.
68
+ await page.hover('[data-topo-chrome-layout="ring"]');
69
+ await page.waitForTimeout(300);
70
+ const ringHover = await page.evaluate(() => {
71
+ const r = document.querySelector('[data-topo-chrome-layout="ring"]');
72
+ return { ls: r ? getComputedStyle(r).letterSpacing : null };
73
+ });
74
+
75
+ // Move to Grid button.
76
+ await page.hover('[data-topo-chrome-layout="grid"]');
77
+ await page.waitForTimeout(300);
78
+ const gridHover = await page.evaluate(() => {
79
+ const g = document.querySelector('[data-topo-chrome-layout="grid"]');
80
+ return { ls: g ? getComputedStyle(g).letterSpacing : null };
81
+ });
82
+
83
+ await browser.close();
84
+
85
+ const isRestLs = (v) => v === 'normal' || v === '0px' || v === '0' || v === null;
86
+ const isHoverLs = (v) => {
87
+ // tracking-wide = 0.025em. At base 14-16px font, that's ~0.35-0.4px.
88
+ if (!v || v === 'normal') return false;
89
+ const n = parseFloat(v);
90
+ return Number.isFinite(n) && n > 0.2 && n < 1.0;
91
+ };
92
+ const hasTrans = (s, prop) =>
93
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
94
+
95
+ const results = {
96
+ rest_ring_ls_zero: isRestLs(restProbe.ringLs),
97
+ rest_grid_ls_zero: isRestLs(restProbe.gridLs),
98
+ ring_trans_has_ls: hasTrans(restProbe.ringTrans, 'letter-spacing'),
99
+ grid_trans_has_ls: hasTrans(restProbe.gridTrans, 'letter-spacing'),
100
+ grid_trans_has_bcol: hasTrans(restProbe.gridTrans, 'border-color'), // R268
101
+ hover_ring_tracked: isHoverLs(ringHover.ls),
102
+ hover_grid_tracked: isHoverLs(gridHover.ls),
103
+ };
104
+ const ok = Object.values(results).every(Boolean);
105
+ console.log(`${ok ? '✅' : '❌'} layout-toggle hover tracking-wide:`, JSON.stringify(results),
106
+ '\n rest: ', restProbe,
107
+ '\n hover ring: ', ringHover,
108
+ '\n hover grid: ', gridHover);
109
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,102 @@
1
+ /* Round 350 verification: chrome reset-button icon gains a hover-
2
+ * rotate preview of the R184 click-spin. Pre-R350 hovering the reset
3
+ * button only changed the button bg (white/5); the icon stayed still.
4
+ * R350 nudges the icon -8° on hover — tactile hint that this button
5
+ * rotates the icon on click. Gated on !resetSpinning so anet-reset-
6
+ * spin keyframe still owns transform during its 450 ms run.
7
+ * 350th-round milestone polish.
8
+ *
9
+ * Contract:
10
+ * - Rest: icon transform 'rotate(0deg)' (no rotation), transformOrigin
11
+ * 'center'.
12
+ * - Hover: icon transform 'rotate(-8deg)'.
13
+ * - Inline transition contains 'transform'.
14
+ * - data-topo-chrome-reset-hover toggles on container; data-topo-
15
+ * chrome-reset-icon-hover mirrors on the icon (only when !spinning).
16
+ * - Pre-R350 invariants: R288 strokeWidth=2.5 + R184 anet-reset-spin
17
+ * className gate intact (no spin running at rest).
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 browser = await chromium.launch({ headless: true });
24
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
25
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
26
+ await ctx.addInitScript(() => {
27
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
28
+ });
29
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
30
+ await ctx.route('**/api/hub/status*', async (route) => {
31
+ const r = await route.fetch();
32
+ const b = await r.json();
33
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
34
+ const mk = (alias) => ({
35
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
36
+ network_id: nid, project_dir: null,
37
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
38
+ });
39
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('a'), mk('b'), mk('c') ] } });
40
+ });
41
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
42
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
43
+
44
+ const page = await ctx.newPage();
45
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
46
+ await page.waitForSelector('[data-topo-chrome-reset]', { timeout: 15000 });
47
+ await page.waitForTimeout(300);
48
+
49
+ // Rest probe.
50
+ const restProbe = await page.evaluate(() => {
51
+ const btn = document.querySelector('[data-topo-chrome-reset]');
52
+ const ico = document.querySelector('[data-topo-chrome-reset-icon]');
53
+ const cs = ico ? getComputedStyle(ico) : null;
54
+ return {
55
+ btnHover: btn?.getAttribute('data-topo-chrome-reset-hover') ?? null,
56
+ icoHover: ico?.getAttribute('data-topo-chrome-reset-icon-hover') ?? null,
57
+ icoTransform: cs?.transform ?? null,
58
+ icoTransition: cs?.transition ?? null,
59
+ icoStrokeW: ico?.getAttribute('stroke-width') ?? null,
60
+ spinClass: ico?.getAttribute('class') ?? null,
61
+ };
62
+ });
63
+
64
+ // Hover the reset button.
65
+ await page.hover('[data-topo-chrome-reset]');
66
+ await page.waitForTimeout(300);
67
+ const hoverProbe = await page.evaluate(() => {
68
+ const btn = document.querySelector('[data-topo-chrome-reset]');
69
+ const ico = document.querySelector('[data-topo-chrome-reset-icon]');
70
+ const cs = ico ? getComputedStyle(ico) : null;
71
+ return {
72
+ btnHover: btn?.getAttribute('data-topo-chrome-reset-hover') ?? null,
73
+ icoHover: ico?.getAttribute('data-topo-chrome-reset-icon-hover') ?? null,
74
+ icoTransform: cs?.transform ?? null,
75
+ };
76
+ });
77
+
78
+ await browser.close();
79
+
80
+ const hasTrans = (s) => /transform\s+\d*\.?\d*s|transform\s+\d+ms/i.test(s || '');
81
+ // computed transform 'none' or a matrix near identity at rest.
82
+ const isRestTransform = (t) => t === 'none' || /matrix\(1, 0, 0, 1, 0, 0\)/.test(t || '') ||
83
+ /matrix\(0\.999/i.test(t || '') /* tiny rounding tolerance */;
84
+ // computed transform for -8deg ≈ matrix(0.990, -0.139, 0.139, 0.990, 0, 0).
85
+ const isHoverTransform = (t) => /matrix\(0\.99/i.test(t || '') && /-0\.13/i.test(t || '');
86
+
87
+ const results = {
88
+ rest_btn_false: restProbe.btnHover === 'false',
89
+ rest_ico_false: restProbe.icoHover === 'false',
90
+ rest_no_rotation: isRestTransform(restProbe.icoTransform),
91
+ trans_has_transform: hasTrans(restProbe.icoTransition),
92
+ rest_strokew_2_5: restProbe.icoStrokeW === '2.5', // R288
93
+ rest_no_spin_class: !/anet-reset-spin/.test(restProbe.spinClass || ''),
94
+ hover_btn_true: hoverProbe.btnHover === 'true',
95
+ hover_ico_true: hoverProbe.icoHover === 'true',
96
+ hover_rotated: isHoverTransform(hoverProbe.icoTransform),
97
+ };
98
+ const ok = Object.values(results).every(Boolean);
99
+ console.log(`${ok ? '✅' : '❌'} reset icon hover-rotate:`, JSON.stringify(results),
100
+ '\n rest: ', restProbe,
101
+ '\n hover:', hoverProbe);
102
+ process.exit(ok ? 0 : 1);
@@ -1 +0,0 @@
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.9"],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 +0,0 @@
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.9"],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]})]})]})]})}])}]);