@sleep2agi/agent-network-dashboard 0.4.6-preview.202 → 0.4.6-preview.204

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 (155) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +2 -2
  15. package/.next/server/app/_not-found.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  19. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/admin.html +2 -2
  24. package/.next/server/app/admin.rsc +2 -2
  25. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  26. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  29. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  30. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  31. package/.next/server/app/index.html +2 -2
  32. package/.next/server/app/index.rsc +3 -3
  33. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  34. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  35. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  36. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  37. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  38. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/login.html +2 -2
  40. package/.next/server/app/login.rsc +3 -3
  41. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  42. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  46. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  47. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/logs.html +2 -2
  49. package/.next/server/app/logs.rsc +2 -2
  50. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  51. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  52. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  54. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  55. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  56. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/messages.html +2 -2
  58. package/.next/server/app/messages.rsc +2 -2
  59. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  60. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  61. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  63. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  64. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  65. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/node.html +2 -2
  67. package/.next/server/app/node.rsc +2 -2
  68. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  69. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  70. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  72. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  73. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  74. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  75. package/.next/server/app/nodes.html +2 -2
  76. package/.next/server/app/nodes.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  78. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  79. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  81. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  82. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  83. package/.next/server/app/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/server-logs.html +2 -2
  86. package/.next/server/app/server-logs.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  88. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  91. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  94. package/.next/server/app/settings/networks.html +2 -2
  95. package/.next/server/app/settings/networks.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  97. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  98. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  100. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  102. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  103. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  105. package/.next/server/app/settings/tokens.html +2 -2
  106. package/.next/server/app/settings/tokens.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  108. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  109. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  111. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  113. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  114. package/.next/server/app/settings.html +2 -2
  115. package/.next/server/app/settings.rsc +3 -3
  116. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  117. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  121. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  122. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  124. package/.next/server/app/tasks.html +2 -2
  125. package/.next/server/app/tasks.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  127. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  128. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  130. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  131. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  132. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  138. package/.next/server/middleware-build-manifest.js +3 -3
  139. package/.next/server/pages/404.html +2 -2
  140. package/.next/server/pages/500.html +1 -1
  141. package/.next/server/server-reference-manifest.js +1 -1
  142. package/.next/server/server-reference-manifest.json +1 -1
  143. package/.next/static/chunks/{0fzk-axksemic.css → 01g4iybwpori..css} +1 -1
  144. package/.next/static/chunks/{0ha6vq_y_~tyq.js → 08tici1mb7.cf.js} +2 -2
  145. package/.next/static/chunks/{0m5sj02b4xfcv.js → 0gulsszoid02_.js} +1 -1
  146. package/.next/static/chunks/{000394fn9cmho.js → 1662d97gb~zh7.js} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +52 -9
  150. package/package.json +1 -1
  151. package/scripts/topo-chrome-press-state-test.mjs +135 -0
  152. package/scripts/topo-legend-swatch-grow-test.mjs +116 -0
  153. /package/.next/static/{r7RnaQFITRFvole_gQuv2 → B6xF4ratsnDH9JEvAWnoB}/_buildManifest.js +0 -0
  154. /package/.next/static/{r7RnaQFITRFvole_gQuv2 → B6xF4ratsnDH9JEvAWnoB}/_clientMiddlewareManifest.js +0 -0
  155. /package/.next/static/{r7RnaQFITRFvole_gQuv2 → B6xF4ratsnDH9JEvAWnoB}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.202"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.204"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.202"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.204"],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":313,"timestamp":73347615339,"id":4,"parentId":1,"tags":{},"startTime":1778881319862,"traceId":"252c798ba05d21e2"},{"name":"load-custom-routes","duration":503,"timestamp":73347615801,"id":5,"parentId":1,"tags":{},"startTime":1778881319862,"traceId":"252c798ba05d21e2"},{"name":"create-dist-dir","duration":645,"timestamp":73347616347,"id":6,"parentId":1,"tags":{},"startTime":1778881319863,"traceId":"252c798ba05d21e2"},{"name":"clean","duration":508,"timestamp":73347617622,"id":7,"parentId":1,"tags":{},"startTime":1778881319864,"traceId":"252c798ba05d21e2"},{"name":"discover-routes","duration":9282,"timestamp":73347698833,"id":8,"parentId":1,"tags":{},"startTime":1778881319945,"traceId":"252c798ba05d21e2"},{"name":"create-root-mapping","duration":171,"timestamp":73347708170,"id":9,"parentId":1,"tags":{},"startTime":1778881319954,"traceId":"252c798ba05d21e2"},{"name":"generate-route-types","duration":30582,"timestamp":73347710905,"id":10,"parentId":1,"tags":{},"startTime":1778881319957,"traceId":"252c798ba05d21e2"},{"name":"public-dir-conflict-check","duration":91,"timestamp":73347741630,"id":11,"parentId":1,"tags":{},"startTime":1778881319988,"traceId":"252c798ba05d21e2"},{"name":"generate-routes-manifest","duration":4133,"timestamp":73347741856,"id":12,"parentId":1,"tags":{},"startTime":1778881319988,"traceId":"252c798ba05d21e2"},{"name":"run-turbopack","duration":5392096,"timestamp":73347750649,"id":14,"parentId":1,"tags":{},"startTime":1778881319997,"traceId":"252c798ba05d21e2"},{"name":"turbopack-build-events","duration":78,"timestamp":73348033084,"id":15,"parentId":1,"tags":{},"startTime":1778881320279,"traceId":"252c798ba05d21e2"},{"name":"run-typescript","duration":8844797,"timestamp":73353152558,"id":16,"parentId":1,"tags":{},"startTime":1778881325399,"traceId":"252c798ba05d21e2"},{"name":"generate-required-server-files","duration":3088,"timestamp":73361998703,"id":18,"parentId":1,"tags":{},"startTime":1778881334245,"traceId":"252c798ba05d21e2"},{"name":"check-static-error-page","duration":11452,"timestamp":73362175905,"id":20,"parentId":19,"tags":{},"startTime":1778881334422,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":566270,"timestamp":73362189561,"id":63,"parentId":22,"tags":{},"startTime":1778881334436,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":577455,"timestamp":73362178539,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778881334425,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":573394,"timestamp":73362189266,"id":62,"parentId":21,"tags":{},"startTime":1778881334436,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":585374,"timestamp":73362177368,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778881334424,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":591102,"timestamp":73362191092,"id":66,"parentId":27,"tags":{},"startTime":1778881334437,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":601066,"timestamp":73362181198,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778881334427,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":597194,"timestamp":73362192092,"id":71,"parentId":33,"tags":{},"startTime":1778881334438,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":607483,"timestamp":73362181876,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":641083,"timestamp":73362192177,"id":72,"parentId":34,"tags":{},"startTime":1778881334438,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":651428,"timestamp":73362181955,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":652807,"timestamp":73362191415,"id":67,"parentId":28,"tags":{},"startTime":1778881334438,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":663026,"timestamp":73362181288,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":653885,"timestamp":73362191989,"id":70,"parentId":32,"tags":{},"startTime":1778881334438,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":664186,"timestamp":73362181770,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":654472,"timestamp":73362192215,"id":73,"parentId":35,"tags":{},"startTime":1778881334438,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":664652,"timestamp":73362182087,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":657532,"timestamp":73362191609,"id":68,"parentId":29,"tags":{},"startTime":1778881334438,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":667834,"timestamp":73362181370,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":658894,"timestamp":73362192351,"id":74,"parentId":36,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":668868,"timestamp":73362182424,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":659085,"timestamp":73362192389,"id":75,"parentId":37,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":668966,"timestamp":73362182546,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":660181,"timestamp":73362192412,"id":76,"parentId":38,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":669995,"timestamp":73362182635,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":664954,"timestamp":73362189765,"id":65,"parentId":26,"tags":{},"startTime":1778881334436,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":673662,"timestamp":73362181103,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778881334427,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":662549,"timestamp":73362192428,"id":77,"parentId":39,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":672328,"timestamp":73362182702,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":665224,"timestamp":73362192457,"id":79,"parentId":41,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":674875,"timestamp":73362182849,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":665425,"timestamp":73362192472,"id":80,"parentId":42,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":675019,"timestamp":73362182927,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":670951,"timestamp":73362192530,"id":84,"parentId":46,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":680298,"timestamp":73362183245,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778881334430,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":671179,"timestamp":73362192514,"id":83,"parentId":45,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":680543,"timestamp":73362183181,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":671358,"timestamp":73362192488,"id":81,"parentId":43,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":680878,"timestamp":73362182996,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":673939,"timestamp":73362192543,"id":85,"parentId":47,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":683195,"timestamp":73362183337,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778881334430,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":678980,"timestamp":73362189653,"id":64,"parentId":25,"tags":{},"startTime":1778881334436,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":687751,"timestamp":73362180929,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778881334427,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":667966,"timestamp":73362204323,"id":88,"parentId":24,"tags":{},"startTime":1778881334451,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":693376,"timestamp":73362178952,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778881334425,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":682145,"timestamp":73362192557,"id":86,"parentId":48,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":689954,"timestamp":73362184793,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778881334431,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":669353,"timestamp":73362205570,"id":89,"parentId":31,"tags":{},"startTime":1778881334452,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":693400,"timestamp":73362181558,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":682676,"timestamp":73362192444,"id":78,"parentId":40,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":692385,"timestamp":73362182769,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":682792,"timestamp":73362192499,"id":82,"parentId":44,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":692220,"timestamp":73362183102,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778881334429,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":676118,"timestamp":73362208320,"id":91,"parentId":50,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":699218,"timestamp":73362185262,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778881334432,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":683838,"timestamp":73362208383,"id":95,"parentId":54,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":706488,"timestamp":73362185777,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778881334432,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":703407,"timestamp":73362192573,"id":87,"parentId":49,"tags":{},"startTime":1778881334439,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":711121,"timestamp":73362184922,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778881334431,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":693693,"timestamp":73362208403,"id":96,"parentId":56,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":715763,"timestamp":73362186377,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778881334433,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":698496,"timestamp":73362208433,"id":98,"parentId":59,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":720021,"timestamp":73362186948,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778881334433,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":722270,"timestamp":73362191771,"id":69,"parentId":30,"tags":{},"startTime":1778881334438,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":732611,"timestamp":73362181473,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778881334428,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":717004,"timestamp":73362208452,"id":99,"parentId":60,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":738463,"timestamp":73362187076,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778881334433,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":721481,"timestamp":73362214371,"id":101,"parentId":58,"tags":{},"startTime":1778881334461,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":749253,"timestamp":73362186655,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778881334433,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":697019,"timestamp":73362246469,"id":102,"parentId":55,"tags":{},"startTime":1778881334493,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":757576,"timestamp":73362185958,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778881334432,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":735609,"timestamp":73362208351,"id":93,"parentId":52,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":759131,"timestamp":73362185502,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778881334432,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":744826,"timestamp":73362208367,"id":94,"parentId":53,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":767602,"timestamp":73362185639,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778881334432,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":750604,"timestamp":73362208288,"id":90,"parentId":23,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":780174,"timestamp":73362178754,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778881334425,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":759789,"timestamp":73362208468,"id":100,"parentId":61,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":781113,"timestamp":73362187179,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778881334433,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":764623,"timestamp":73362208339,"id":92,"parentId":51,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":787610,"timestamp":73362185388,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778881334432,"traceId":"252c798ba05d21e2"},{"name":"is-page-static","duration":766797,"timestamp":73362208416,"id":97,"parentId":57,"tags":{},"startTime":1778881334455,"traceId":"252c798ba05d21e2"},{"name":"check-page","duration":788722,"timestamp":73362186532,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778881334433,"traceId":"252c798ba05d21e2"},{"name":"static-check","duration":800383,"timestamp":73362174907,"id":19,"parentId":1,"tags":{},"startTime":1778881334421,"traceId":"252c798ba05d21e2"},{"name":"write-routes-manifest","duration":449,"timestamp":73362981588,"id":104,"parentId":1,"tags":{},"startTime":1778881335228,"traceId":"252c798ba05d21e2"},{"name":"load-dotenv","duration":44,"timestamp":73362993188,"id":107,"parentId":106,"tags":{},"startTime":1778881335239,"traceId":"252c798ba05d21e2"},{"name":"run-export-path-map","duration":624,"timestamp":73362996909,"id":108,"parentId":106,"tags":{},"startTime":1778881335243,"traceId":"252c798ba05d21e2"},{"name":"next-export","duration":568772,"timestamp":73362991957,"id":106,"parentId":1,"tags":{},"startTime":1778881335238,"traceId":"252c798ba05d21e2"}]
2
- [{"name":"move-exported-app-not-found-","duration":3015,"timestamp":73363565261,"id":109,"parentId":105,"tags":{},"startTime":1778881335812,"traceId":"252c798ba05d21e2"},{"name":"move-exported-app-global-error-","duration":597,"timestamp":73363568386,"id":110,"parentId":105,"tags":{},"startTime":1778881335815,"traceId":"252c798ba05d21e2"},{"name":"static-generation","duration":584608,"timestamp":73362986642,"id":105,"parentId":1,"tags":{},"startTime":1778881335233,"traceId":"252c798ba05d21e2"},{"name":"write-routes-manifest","duration":564,"timestamp":73363571487,"id":111,"parentId":1,"tags":{},"startTime":1778881335818,"traceId":"252c798ba05d21e2"},{"name":"print-tree-view","duration":5070,"timestamp":73363592888,"id":112,"parentId":1,"tags":{},"startTime":1778881335839,"traceId":"252c798ba05d21e2"},{"name":"write-route-bundle-stats","duration":15386,"timestamp":73363598050,"id":113,"parentId":1,"tags":{},"startTime":1778881335844,"traceId":"252c798ba05d21e2"},{"name":"telemetry-flush","duration":18593,"timestamp":73363613477,"id":114,"parentId":1,"tags":{},"startTime":1778881335860,"traceId":"252c798ba05d21e2"},{"name":"next-build","duration":16066792,"timestamp":73347565321,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778881319812,"traceId":"252c798ba05d21e2"}]
1
+ [{"name":"generate-buildid","duration":248,"timestamp":74127953392,"id":4,"parentId":1,"tags":{},"startTime":1778882100200,"traceId":"29fcf06fc7464872"},{"name":"load-custom-routes","duration":497,"timestamp":74127953820,"id":5,"parentId":1,"tags":{},"startTime":1778882100200,"traceId":"29fcf06fc7464872"},{"name":"create-dist-dir","duration":593,"timestamp":74127954359,"id":6,"parentId":1,"tags":{},"startTime":1778882100201,"traceId":"29fcf06fc7464872"},{"name":"clean","duration":481,"timestamp":74127955576,"id":7,"parentId":1,"tags":{},"startTime":1778882100202,"traceId":"29fcf06fc7464872"},{"name":"discover-routes","duration":9412,"timestamp":74128038973,"id":8,"parentId":1,"tags":{},"startTime":1778882100285,"traceId":"29fcf06fc7464872"},{"name":"create-root-mapping","duration":123,"timestamp":74128048439,"id":9,"parentId":1,"tags":{},"startTime":1778882100295,"traceId":"29fcf06fc7464872"},{"name":"generate-route-types","duration":39718,"timestamp":74128051148,"id":10,"parentId":1,"tags":{},"startTime":1778882100297,"traceId":"29fcf06fc7464872"},{"name":"public-dir-conflict-check","duration":129,"timestamp":74128090949,"id":11,"parentId":1,"tags":{},"startTime":1778882100337,"traceId":"29fcf06fc7464872"},{"name":"generate-routes-manifest","duration":5167,"timestamp":74128091202,"id":12,"parentId":1,"tags":{},"startTime":1778882100337,"traceId":"29fcf06fc7464872"},{"name":"run-turbopack","duration":5290351,"timestamp":74128102161,"id":14,"parentId":1,"tags":{},"startTime":1778882100348,"traceId":"29fcf06fc7464872"},{"name":"turbopack-build-events","duration":125,"timestamp":74128374708,"id":15,"parentId":1,"tags":{},"startTime":1778882100621,"traceId":"29fcf06fc7464872"},{"name":"run-typescript","duration":8505197,"timestamp":74133401729,"id":16,"parentId":1,"tags":{},"startTime":1778882105648,"traceId":"29fcf06fc7464872"},{"name":"generate-required-server-files","duration":2460,"timestamp":74141907965,"id":18,"parentId":1,"tags":{},"startTime":1778882114154,"traceId":"29fcf06fc7464872"},{"name":"check-static-error-page","duration":14381,"timestamp":74142076614,"id":20,"parentId":19,"tags":{},"startTime":1778882114323,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":398677,"timestamp":74142094320,"id":63,"parentId":22,"tags":{},"startTime":1778882114341,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":413493,"timestamp":74142079699,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778882114326,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":498991,"timestamp":74142093919,"id":62,"parentId":21,"tags":{},"startTime":1778882114340,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":514854,"timestamp":74142078175,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778882114324,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":510528,"timestamp":74142095370,"id":69,"parentId":30,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":522334,"timestamp":74142083638,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778882114330,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":513215,"timestamp":74142094654,"id":65,"parentId":26,"tags":{},"startTime":1778882114341,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":524915,"timestamp":74142083016,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778882114329,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":513998,"timestamp":74142095066,"id":67,"parentId":28,"tags":{},"startTime":1778882114341,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":525809,"timestamp":74142083322,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778882114330,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":521507,"timestamp":74142095733,"id":73,"parentId":35,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":532759,"timestamp":74142084658,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778882114331,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":526379,"timestamp":74142095228,"id":68,"parentId":29,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":538192,"timestamp":74142083463,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778882114330,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":528187,"timestamp":74142094505,"id":64,"parentId":25,"tags":{},"startTime":1778882114341,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":539897,"timestamp":74142082834,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778882114329,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":531368,"timestamp":74142095698,"id":72,"parentId":34,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":542604,"timestamp":74142084511,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778882114331,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":532942,"timestamp":74142095904,"id":75,"parentId":37,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":543507,"timestamp":74142085376,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778882114332,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":533092,"timestamp":74142095924,"id":76,"parentId":38,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":543522,"timestamp":74142085520,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778882114332,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":559543,"timestamp":74142094796,"id":66,"parentId":27,"tags":{},"startTime":1778882114341,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":571244,"timestamp":74142083162,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778882114329,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":558775,"timestamp":74142095939,"id":77,"parentId":39,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":569145,"timestamp":74142085630,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778882114332,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":559321,"timestamp":74142095617,"id":71,"parentId":33,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":570619,"timestamp":74142084353,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778882114331,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":559150,"timestamp":74142095961,"id":79,"parentId":41,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":569261,"timestamp":74142085879,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778882114332,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":565340,"timestamp":74142095870,"id":74,"parentId":36,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":576064,"timestamp":74142085190,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778882114331,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":565529,"timestamp":74142096025,"id":83,"parentId":45,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":575262,"timestamp":74142086337,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778882114333,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":570595,"timestamp":74142095996,"id":82,"parentId":44,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":580402,"timestamp":74142086232,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778882114333,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":571469,"timestamp":74142095987,"id":81,"parentId":43,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":581361,"timestamp":74142086132,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778882114332,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":575696,"timestamp":74142096061,"id":86,"parentId":48,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":585090,"timestamp":74142086721,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778882114333,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":578394,"timestamp":74142096078,"id":87,"parentId":49,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":587665,"timestamp":74142086846,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778882114333,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":579416,"timestamp":74142095974,"id":80,"parentId":42,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":589432,"timestamp":74142085999,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778882114332,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":579975,"timestamp":74142096048,"id":85,"parentId":47,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":589462,"timestamp":74142086596,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778882114333,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":581207,"timestamp":74142096038,"id":84,"parentId":46,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":590834,"timestamp":74142086448,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778882114333,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":578187,"timestamp":74142099295,"id":88,"parentId":24,"tags":{},"startTime":1778882114346,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":597268,"timestamp":74142080253,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778882114327,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":582091,"timestamp":74142095552,"id":70,"parentId":32,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":593542,"timestamp":74142084126,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778882114330,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":582572,"timestamp":74142100453,"id":89,"parentId":31,"tags":{},"startTime":1778882114347,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":599285,"timestamp":74142083805,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778882114330,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":587336,"timestamp":74142095948,"id":78,"parentId":40,"tags":{},"startTime":1778882114342,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":597580,"timestamp":74142085748,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778882114332,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":571948,"timestamp":74142113827,"id":94,"parentId":53,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":597795,"timestamp":74142088026,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778882114334,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":580201,"timestamp":74142113863,"id":97,"parentId":57,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":604584,"timestamp":74142089530,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778882114336,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":588640,"timestamp":74142113876,"id":98,"parentId":59,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":612284,"timestamp":74142090285,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778882114337,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":604502,"timestamp":74142113892,"id":99,"parentId":60,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":627984,"timestamp":74142090467,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778882114337,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":613522,"timestamp":74142113906,"id":100,"parentId":61,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":636830,"timestamp":74142090655,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778882114337,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":617662,"timestamp":74142113919,"id":101,"parentId":55,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":643024,"timestamp":74142088604,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778882114335,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":621027,"timestamp":74142113818,"id":93,"parentId":52,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":647154,"timestamp":74142087731,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778882114334,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":621766,"timestamp":74142113795,"id":91,"parentId":50,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":648274,"timestamp":74142087322,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778882114334,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":623936,"timestamp":74142113807,"id":92,"parentId":51,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":650277,"timestamp":74142087522,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778882114334,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":619030,"timestamp":74142119233,"id":102,"parentId":58,"tags":{},"startTime":1778882114366,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":648545,"timestamp":74142089786,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778882114336,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":625013,"timestamp":74142113837,"id":95,"parentId":54,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":650580,"timestamp":74142088305,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778882114335,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":626804,"timestamp":74142113750,"id":90,"parentId":23,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":660610,"timestamp":74142079980,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778882114326,"traceId":"29fcf06fc7464872"},{"name":"is-page-static","duration":626930,"timestamp":74142113853,"id":96,"parentId":56,"tags":{},"startTime":1778882114360,"traceId":"29fcf06fc7464872"},{"name":"check-page","duration":651539,"timestamp":74142089269,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778882114336,"traceId":"29fcf06fc7464872"},{"name":"static-check","duration":665315,"timestamp":74142075530,"id":19,"parentId":1,"tags":{},"startTime":1778882114322,"traceId":"29fcf06fc7464872"},{"name":"write-routes-manifest","duration":460,"timestamp":74142747439,"id":104,"parentId":1,"tags":{},"startTime":1778882114994,"traceId":"29fcf06fc7464872"},{"name":"load-dotenv","duration":39,"timestamp":74142759103,"id":107,"parentId":106,"tags":{},"startTime":1778882115005,"traceId":"29fcf06fc7464872"},{"name":"run-export-path-map","duration":624,"timestamp":74142761670,"id":108,"parentId":106,"tags":{},"startTime":1778882115008,"traceId":"29fcf06fc7464872"},{"name":"next-export","duration":526074,"timestamp":74142757854,"id":106,"parentId":1,"tags":{},"startTime":1778882115004,"traceId":"29fcf06fc7464872"}]
2
+ [{"name":"move-exported-app-not-found-","duration":2079,"timestamp":74143287263,"id":109,"parentId":105,"tags":{},"startTime":1778882115534,"traceId":"29fcf06fc7464872"},{"name":"move-exported-app-global-error-","duration":482,"timestamp":74143289429,"id":110,"parentId":105,"tags":{},"startTime":1778882115536,"traceId":"29fcf06fc7464872"},{"name":"static-generation","duration":539899,"timestamp":74142751771,"id":105,"parentId":1,"tags":{},"startTime":1778882114998,"traceId":"29fcf06fc7464872"},{"name":"write-routes-manifest","duration":421,"timestamp":74143291838,"id":111,"parentId":1,"tags":{},"startTime":1778882115538,"traceId":"29fcf06fc7464872"},{"name":"print-tree-view","duration":3679,"timestamp":74143308218,"id":112,"parentId":1,"tags":{},"startTime":1778882115554,"traceId":"29fcf06fc7464872"},{"name":"write-route-bundle-stats","duration":12070,"timestamp":74143311920,"id":113,"parentId":1,"tags":{},"startTime":1778882115558,"traceId":"29fcf06fc7464872"},{"name":"telemetry-flush","duration":23908,"timestamp":74143324042,"id":114,"parentId":1,"tags":{},"startTime":1778882115570,"traceId":"29fcf06fc7464872"},{"name":"next-build","duration":15442603,"timestamp":74127905367,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778882100152,"traceId":"29fcf06fc7464872"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5392096,"timestamp":73347750649,"id":14,"parentId":1,"tags":{},"startTime":1778881319997,"traceId":"252c798ba05d21e2"},{"name":"turbopack-build-events","duration":78,"timestamp":73348033084,"id":15,"parentId":1,"tags":{},"startTime":1778881320279,"traceId":"252c798ba05d21e2"},{"name":"run-typescript","duration":8844797,"timestamp":73353152558,"id":16,"parentId":1,"tags":{},"startTime":1778881325399,"traceId":"252c798ba05d21e2"},{"name":"static-check","duration":800383,"timestamp":73362174907,"id":19,"parentId":1,"tags":{},"startTime":1778881334421,"traceId":"252c798ba05d21e2"},{"name":"static-generation","duration":584608,"timestamp":73362986642,"id":105,"parentId":1,"tags":{},"startTime":1778881335233,"traceId":"252c798ba05d21e2"},{"name":"telemetry-flush","duration":18593,"timestamp":73363613477,"id":114,"parentId":1,"tags":{},"startTime":1778881335860,"traceId":"252c798ba05d21e2"},{"name":"next-build","duration":16066792,"timestamp":73347565321,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778881319812,"traceId":"252c798ba05d21e2"}]
1
+ [{"name":"run-turbopack","duration":5290351,"timestamp":74128102161,"id":14,"parentId":1,"tags":{},"startTime":1778882100348,"traceId":"29fcf06fc7464872"},{"name":"turbopack-build-events","duration":125,"timestamp":74128374708,"id":15,"parentId":1,"tags":{},"startTime":1778882100621,"traceId":"29fcf06fc7464872"},{"name":"run-typescript","duration":8505197,"timestamp":74133401729,"id":16,"parentId":1,"tags":{},"startTime":1778882105648,"traceId":"29fcf06fc7464872"},{"name":"static-check","duration":665315,"timestamp":74142075530,"id":19,"parentId":1,"tags":{},"startTime":1778882114322,"traceId":"29fcf06fc7464872"},{"name":"static-generation","duration":539899,"timestamp":74142751771,"id":105,"parentId":1,"tags":{},"startTime":1778882114998,"traceId":"29fcf06fc7464872"},{"name":"telemetry-flush","duration":23908,"timestamp":74143324042,"id":114,"parentId":1,"tags":{},"startTime":1778882115570,"traceId":"29fcf06fc7464872"},{"name":"next-build","duration":15442603,"timestamp":74127905367,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778882100152,"traceId":"29fcf06fc7464872"}]
@@ -1425,7 +1425,12 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1425
1425
  title="Ring layout (l to toggle)"
1426
1426
  data-topo-chrome-layout="ring"
1427
1427
  data-topo-chrome-layout-active={layout === 'ring' ? 'true' : 'false'}
1428
- className={`px-2.5 py-1 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${layout === 'ring' ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20' : 'text-gray-500 hover:text-gray-300 hover:bg-cyan-500/5'}`}
1428
+ // Round 196 / Loop: add active: (pressed) state for tactile
1429
+ // click feedback — bridges mouse-down → R186/R184/R192 pop-on-
1430
+ // release. Selected variant deepens to cyan-500/25 (one tier
1431
+ // above its hover:cyan-500/20); unselected variant deepens
1432
+ // to cyan-500/15 (one tier above its hover:cyan-500/5).
1433
+ className={`px-2.5 py-1 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${layout === 'ring' ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20 active:bg-cyan-500/25' : 'text-gray-500 hover:text-gray-300 hover:bg-cyan-500/5 active:bg-cyan-500/15'}`}
1429
1434
  >
1430
1435
  Ring
1431
1436
  </button>
@@ -1435,7 +1440,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1435
1440
  title="Grid layout (l to toggle)"
1436
1441
  data-topo-chrome-layout="grid"
1437
1442
  data-topo-chrome-layout-active={layout === 'grid' ? 'true' : 'false'}
1438
- className={`px-2.5 py-1 border-l border-gray-500/25 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${layout === 'grid' ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20' : 'text-gray-500 hover:text-gray-300 hover:bg-cyan-500/5'}`}
1443
+ // Round 196 / Loop: R163 layout-toggle Grid variant picks up
1444
+ // press-state — same tier pattern as Ring above.
1445
+ className={`px-2.5 py-1 border-l border-gray-500/25 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${layout === 'grid' ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20 active:bg-cyan-500/25' : 'text-gray-500 hover:text-gray-300 hover:bg-cyan-500/5 active:bg-cyan-500/15'}`}
1439
1446
  >
1440
1447
  Grid
1441
1448
  </button>
@@ -4927,7 +4934,30 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4927
4934
  data-legend-row-tinted={isPinned ? 'pinned' : hoveredStatus === row.key ? 'hover' : 'none'}
4928
4935
  style={{ transition: 'fill 150ms ease-out, opacity 150ms ease-out' }}
4929
4936
  />
4930
- <circle cx="16" cy={row.y0} r="5.5" fill={row.fill} />
4937
+ {/* Round 197 / Loop: swatch dot scales r 5.5 → 7 when its
4938
+ row is hovered or pinned. Pre-R197 the swatch was a
4939
+ flat constant size — the row got R55/R61 fill brighten,
4940
+ R105 bg tint, R144 1px row lift, R181 pin ring, but
4941
+ the swatch dot at the row's *visual identity anchor*
4942
+ stayed still. Adding the size response gives the
4943
+ swatch its own click/hover feel and visually rhymes
4944
+ with R177 hub hover-lift (hub ring r 14→17). Stays
4945
+ well inside the r=8 R181 pin ring (7 + 0 stroke vs
4946
+ 8 - 0.75 inner ≈ 7.25) so the two layers don't fight.
4947
+ CSS r-as-property is interpolatable by Chrome/Safari/
4948
+ FF post-2020. Geometry-unchanged at rest, so the
4949
+ overlap test sees the same baseline. */}
4950
+ <circle
4951
+ cx="16" cy={row.y0}
4952
+ r="5.5"
4953
+ fill={row.fill}
4954
+ data-legend-swatch={row.key}
4955
+ data-legend-swatch-state={isPinned ? 'pinned' : isRowHovered ? 'hover' : 'idle'}
4956
+ style={{
4957
+ r: isRowHovered || isPinned ? '7px' : '5.5px',
4958
+ transition: 'r 150ms ease-out',
4959
+ } as React.CSSProperties}
4960
+ />
4931
4961
  {/* R61 pinned-state ring — concentric stroke at r=8 in
4932
4962
  the row colour, draws OUTSIDE the swatch so it
4933
4963
  doesn't fight the fill colour the user is matching.
@@ -5105,7 +5135,11 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5105
5135
  // so the active chip stays responsive to mouse. R179
5106
5136
  // closes the trio so all three chrome active-cyan
5107
5137
  // surfaces ship the same gesture.
5108
- className={`px-2 py-1 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${idx > 0 ? 'border-l' : ''} ${nodeScale === v ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20' : 'hover:bg-white/5'}`}
5138
+ // Round 196 / Loop: nodeSize buttons pick up press-state
5139
+ // (active:) — selected variant deepens to cyan-500/25,
5140
+ // unselected to white/10. Same tier pattern as R196 layout
5141
+ // toggle + zoom/reset/fullscreen below.
5142
+ className={`px-2 py-1 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset ${idx > 0 ? 'border-l' : ''} ${nodeScale === v ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20 active:bg-cyan-500/25' : 'hover:bg-white/5 active:bg-white/10'}`}
5109
5143
  style={{ color: nodeScale === v ? undefined : pal.legendText, borderColor: pal.containerBorder }}
5110
5144
  >
5111
5145
  {lbl}
@@ -5120,7 +5154,10 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5120
5154
  onClick={() => { popChrome('zoom-out'); zoomByDiscrete(1 / 1.2); }}
5121
5155
  data-topo-chrome-zoom-out
5122
5156
  data-topo-chrome-zoom-out-popping={chromePopping === 'zoom-out' ? 'true' : 'false'}
5123
- className="px-2 py-1 hover:bg-white/5 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset"
5157
+ // R196: press-state deepens bg one tier above hover (white/5
5158
+ // → white/10) so mouse-down has a tactile dim before the
5159
+ // R186 icon pop fires on release.
5160
+ className="px-2 py-1 hover:bg-white/5 active:bg-white/10 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset"
5124
5161
  style={{ color: pal.legendText }}
5125
5162
  aria-label="Zoom out"
5126
5163
  title="Zoom out (−)"
@@ -5177,7 +5214,8 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5177
5214
  onClick={() => { popChrome('zoom-in'); zoomByDiscrete(1.2); }}
5178
5215
  data-topo-chrome-zoom-in
5179
5216
  data-topo-chrome-zoom-in-popping={chromePopping === 'zoom-in' ? 'true' : 'false'}
5180
- className="px-2 py-1 hover:bg-white/5 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset"
5217
+ // R196: press-state (mirror of zoom-out above).
5218
+ className="px-2 py-1 hover:bg-white/5 active:bg-white/10 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 focus-visible:ring-inset"
5181
5219
  style={{ color: pal.legendText }}
5182
5220
  aria-label="Zoom in"
5183
5221
  title="Zoom in (+)"
@@ -5197,7 +5235,9 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5197
5235
  onClick={() => { armResetSpin(); resetView(); }}
5198
5236
  data-topo-chrome-reset
5199
5237
  data-topo-chrome-reset-spinning={resetSpinning ? 'true' : 'false'}
5200
- className="p-1.5 rounded-md border hover:bg-white/5 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60"
5238
+ // R196: press-state deepens before R184 reset-spin fires on
5239
+ // release — mouse-down dim then 450ms spin = full handshake.
5240
+ 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"
5201
5241
  style={{ background: pal.legendBox.fill, borderColor: pal.containerBorder, color: pal.legendText }}
5202
5242
  aria-label="Reset view"
5203
5243
  title="Reset zoom + pan (0, or double-click the canvas)"
@@ -5234,10 +5274,13 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5234
5274
  onClick={toggleFullscreen}
5235
5275
  data-topo-chrome-fullscreen
5236
5276
  data-topo-chrome-fullscreen-active={isFullscreen ? 'true' : 'false'}
5277
+ // R196: fullscreen also picks up press-state — active variant
5278
+ // deepens cyan-500/20 → cyan-500/25 on press; non-active
5279
+ // deepens white/5 → white/10.
5237
5280
  className={`p-1.5 rounded-md border transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-cyan-400/60 ${
5238
5281
  isFullscreen
5239
- ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20'
5240
- : 'hover:bg-white/5'
5282
+ ? 'bg-cyan-500/15 text-cyan-300 hover:bg-cyan-500/20 active:bg-cyan-500/25'
5283
+ : 'hover:bg-white/5 active:bg-white/10'
5241
5284
  }`}
5242
5285
  style={{
5243
5286
  borderColor: pal.containerBorder,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.4.6-preview.202",
3
+ "version": "0.4.6-preview.204",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,135 @@
1
+ /* Round 196 verification: every chrome button picks up an active:
2
+ * (pressed) state for tactile click feedback. Bridges the gap between
3
+ * mouse-down and the existing release-pop animations:
4
+ * R184 reset-spin (0.45s rotation on release)
5
+ * R186 +/− icon pop (0.22s scale on release)
6
+ * R192 readout pop (same 0.22s on release)
7
+ * Pre-R196 mouse-down → release was instant; nothing acknowledged the
8
+ * held-down phase. R196 lays a darker bg under the cursor while held.
9
+ *
10
+ * Buttons covered:
11
+ * layout Ring / Grid (active variant: cyan-500/25, base: cyan-500/15)
12
+ * nodeSize S / M / L (active: cyan-500/25, base: white/10)
13
+ * zoom-out / zoom-in (white/10)
14
+ * reset (white/10)
15
+ * fullscreen (active: cyan-500/25, base: white/10)
16
+ *
17
+ * Test:
18
+ * 1. Static markup check — each button's class string contains the
19
+ * 'active:bg-...' modifier(s).
20
+ * 2. Runtime check on zoom-out: mouse.down on the button, getComputed-
21
+ * Style snapshot — backgroundColor differs from the idle/hover bg.
22
+ * Mouse.up + move off — back to idle bg.
23
+ */
24
+ import { chromium } from 'playwright';
25
+ import { readFileSync } from 'node:fs';
26
+
27
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
28
+ const browser = await chromium.launch({ headless: true });
29
+
30
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
31
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
32
+ await ctx.addInitScript(() => {
33
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
34
+ });
35
+
36
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
37
+ await ctx.route('**/api/hub/status*', async (route) => {
38
+ const r = await route.fetch();
39
+ const b = await r.json();
40
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
41
+ const mk = (alias) => ({
42
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'cli-claude-code',
43
+ network_id: nid, project_dir: null,
44
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
45
+ });
46
+ await route.fulfill({ response: r, json: { ...b, sessions: [
47
+ mk('alpha'), mk('beta'), mk('gamma'), mk('delta'),
48
+ ] } });
49
+ });
50
+ await ctx.route('**/api/hub/messages*', (route) => route.fulfill({ json: { messages: [] } }));
51
+ await ctx.route('**/api/hub/tasks*', (route) => route.fulfill({ json: { tasks: [] } }));
52
+
53
+ const page = await ctx.newPage();
54
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
55
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
56
+ await page.waitForSelector('[data-topo-chrome-zoom-in]', { timeout: 10000 });
57
+ await page.waitForTimeout(300);
58
+
59
+ // Collect all chrome button className strings
60
+ const markup = await page.evaluate(() => ({
61
+ layoutRing: document.querySelector('[data-topo-chrome-layout="ring"]')?.getAttribute('class') || '',
62
+ layoutGrid: document.querySelector('[data-topo-chrome-layout="grid"]')?.getAttribute('class') || '',
63
+ nodeSizeS: document.querySelector('[data-topo-chrome-nodesize="S"]')?.getAttribute('class') || '',
64
+ nodeSizeM: document.querySelector('[data-topo-chrome-nodesize="M"]')?.getAttribute('class') || '',
65
+ nodeSizeL: document.querySelector('[data-topo-chrome-nodesize="L"]')?.getAttribute('class') || '',
66
+ zoomOut: document.querySelector('[data-topo-chrome-zoom-out]')?.getAttribute('class') || '',
67
+ zoomIn: document.querySelector('[data-topo-chrome-zoom-in]')?.getAttribute('class') || '',
68
+ reset: document.querySelector('[data-topo-chrome-reset]')?.getAttribute('class') || '',
69
+ fullscreen: document.querySelector('[data-topo-chrome-fullscreen]')?.getAttribute('class') || '',
70
+ }));
71
+
72
+ // Static markup assertions
73
+ const has = (s, modifier) => s.includes(modifier);
74
+ const staticChecks = {
75
+ layoutRing_press_active: has(markup.layoutRing, 'active:bg-cyan-500/15') || has(markup.layoutRing, 'active:bg-cyan-500/25'),
76
+ layoutGrid_press_active: has(markup.layoutGrid, 'active:bg-cyan-500/15') || has(markup.layoutGrid, 'active:bg-cyan-500/25'),
77
+ // nodeSize S/M/L: idle nodeScale=L default, so S/M are non-active
78
+ // variant (active:bg-white/10); L is the active cyan variant
79
+ // (active:bg-cyan-500/25). Check at least one of each pattern present.
80
+ nodeSizeS_press: has(markup.nodeSizeS, 'active:bg-white/10') || has(markup.nodeSizeS, 'active:bg-cyan-500/25'),
81
+ nodeSizeM_press: has(markup.nodeSizeM, 'active:bg-white/10') || has(markup.nodeSizeM, 'active:bg-cyan-500/25'),
82
+ nodeSizeL_press: has(markup.nodeSizeL, 'active:bg-white/10') || has(markup.nodeSizeL, 'active:bg-cyan-500/25'),
83
+ zoomOut_press_white: has(markup.zoomOut, 'active:bg-white/10'),
84
+ zoomIn_press_white: has(markup.zoomIn, 'active:bg-white/10'),
85
+ reset_press_white: has(markup.reset, 'active:bg-white/10'),
86
+ fullscreen_press: has(markup.fullscreen, 'active:bg-white/10') || has(markup.fullscreen, 'active:bg-cyan-500/25'),
87
+ };
88
+
89
+ // Stylesheet-presence check: walk document.styleSheets recursively
90
+ // and confirm Tailwind compiled the press-state rules into the page's
91
+ // CSS. Tailwind 4 nests utilities inside @layer utilities { ... } as
92
+ // a single grouping rule, so cssRules iteration must recurse.
93
+ // Synthetic Playwright pointer events don't reliably trigger
94
+ // :hover/:active in headless Chromium, so runtime computed-style
95
+ // snapshots are unreliable. Checking that the rule exists in the
96
+ // page's stylesheets is the closest static guarantee that a real
97
+ // user's click will deepen the bg.
98
+ const cssChecks = await page.evaluate(() => {
99
+ const activeRules = [];
100
+ function walk(list) {
101
+ for (const r of list || []) {
102
+ if (r.selectorText && r.selectorText.includes(':active')) {
103
+ activeRules.push({ selector: r.selectorText, text: r.cssText });
104
+ }
105
+ if (r.cssRules) walk(r.cssRules);
106
+ }
107
+ }
108
+ for (const sheet of document.styleSheets) {
109
+ let list;
110
+ try { list = sheet.cssRules; } catch { continue; }
111
+ walk(list);
112
+ }
113
+ // For each modifier the markup uses, verify at least one matching
114
+ // CSSStyleRule exists. Tailwind 4 emits each rule twice (an RGBA
115
+ // fallback and a color-mix() form), so .some() across either is fine.
116
+ const has = (selectorSubstr) =>
117
+ activeRules.some(r => r.selector.includes(selectorSubstr));
118
+ return {
119
+ css_active_white_10: has('active\\:bg-white\\/10'),
120
+ css_active_cyan_25: has('active\\:bg-cyan-500\\/25'),
121
+ css_active_cyan_15: has('active\\:bg-cyan-500\\/15'),
122
+ sample_active_rules: activeRules.length,
123
+ };
124
+ });
125
+
126
+ await browser.close();
127
+
128
+ const results = { ...staticChecks, ...cssChecks };
129
+ // Boolean fields must be true; numeric sample_active_rules just needs > 0.
130
+ const ok = Object.entries(results).every(([k, v]) =>
131
+ k.startsWith('sample_') ? (typeof v === 'number' && v > 0) : v === true);
132
+ console.log(`${ok ? '✅' : '❌'} chrome press-state:`, JSON.stringify(results),
133
+ `\n markup snippets:`,
134
+ Object.fromEntries(Object.entries(markup).map(([k, v]) => [k, v.match(/active:bg-[^\s]+/g)?.join(' ') || '(no active: classes)'])));
135
+ process.exit(ok ? 0 : 1);