@sleep2agi/agent-network-dashboard 0.5.1-preview.75 → 0.5.1-preview.77

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 (152) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +2 -2
  132. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  134. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  137. package/.next/server/middleware-build-manifest.js +3 -3
  138. package/.next/server/pages/404.html +2 -2
  139. package/.next/server/pages/500.html +1 -1
  140. package/.next/static/chunks/{0_p8jkzdw5x2_.css → 017hq2-5l~_98.css} +1 -1
  141. package/.next/static/chunks/{09nf8lytkoal0.js → 0f0cvkm8bqaoj.js} +2 -2
  142. package/.next/static/chunks/{0_v5hfvrdl_hp.js → 0rp3q77164dtw.js} +1 -1
  143. package/.next/static/chunks/{14q1j54w_b86d.js → 0wvyq7b1296ad.js} +1 -1
  144. package/.next/trace +2 -2
  145. package/.next/trace-build +1 -1
  146. package/app/components/TopoGraph.tsx +39 -4
  147. package/package.json +1 -1
  148. package/scripts/topo-chip-digit-hover-bold-test.mjs +94 -0
  149. package/scripts/topo-spoke-active-stroke-test.mjs +95 -0
  150. /package/.next/static/{Bkp9rIIim6cChdv1GNvxW → qsNFQ2CsFsBo74Vkw4xzN}/_buildManifest.js +0 -0
  151. /package/.next/static/{Bkp9rIIim6cChdv1GNvxW → qsNFQ2CsFsBo74Vkw4xzN}/_clientMiddlewareManifest.js +0 -0
  152. /package/.next/static/{Bkp9rIIim6cChdv1GNvxW → qsNFQ2CsFsBo74Vkw4xzN}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.74"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.76"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.74"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.76"],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":282,"timestamp":154027310210,"id":4,"parentId":1,"tags":{},"startTime":1778961999556,"traceId":"1b41b9eb05b85e87"},{"name":"load-custom-routes","duration":512,"timestamp":154027310635,"id":5,"parentId":1,"tags":{},"startTime":1778961999557,"traceId":"1b41b9eb05b85e87"},{"name":"create-dist-dir","duration":701,"timestamp":154027311190,"id":6,"parentId":1,"tags":{},"startTime":1778961999557,"traceId":"1b41b9eb05b85e87"},{"name":"clean","duration":32810,"timestamp":154027312613,"id":7,"parentId":1,"tags":{},"startTime":1778961999559,"traceId":"1b41b9eb05b85e87"},{"name":"discover-routes","duration":10669,"timestamp":154027434401,"id":8,"parentId":1,"tags":{},"startTime":1778961999681,"traceId":"1b41b9eb05b85e87"},{"name":"create-root-mapping","duration":138,"timestamp":154027445156,"id":9,"parentId":1,"tags":{},"startTime":1778961999691,"traceId":"1b41b9eb05b85e87"},{"name":"generate-route-types","duration":25157,"timestamp":154027447963,"id":10,"parentId":1,"tags":{},"startTime":1778961999694,"traceId":"1b41b9eb05b85e87"},{"name":"public-dir-conflict-check","duration":99,"timestamp":154027473229,"id":11,"parentId":1,"tags":{},"startTime":1778961999720,"traceId":"1b41b9eb05b85e87"},{"name":"generate-routes-manifest","duration":5920,"timestamp":154027473447,"id":12,"parentId":1,"tags":{},"startTime":1778961999720,"traceId":"1b41b9eb05b85e87"},{"name":"run-turbopack","duration":5661020,"timestamp":154027499564,"id":14,"parentId":1,"tags":{},"startTime":1778961999746,"traceId":"1b41b9eb05b85e87"},{"name":"turbopack-build-events","duration":72,"timestamp":154027788854,"id":15,"parentId":1,"tags":{},"startTime":1778962000035,"traceId":"1b41b9eb05b85e87"},{"name":"run-typescript","duration":9386957,"timestamp":154033169233,"id":16,"parentId":1,"tags":{},"startTime":1778962005416,"traceId":"1b41b9eb05b85e87"},{"name":"generate-required-server-files","duration":3672,"timestamp":154042557837,"id":18,"parentId":1,"tags":{},"startTime":1778962014804,"traceId":"1b41b9eb05b85e87"},{"name":"check-static-error-page","duration":13701,"timestamp":154042728508,"id":20,"parentId":19,"tags":{},"startTime":1778962014975,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":464847,"timestamp":154042745411,"id":65,"parentId":22,"tags":{},"startTime":1778962014992,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":478708,"timestamp":154042731723,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778962014978,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":526919,"timestamp":154042745110,"id":64,"parentId":21,"tags":{},"startTime":1778962014991,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":541995,"timestamp":154042730123,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778962014976,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":558871,"timestamp":154042745580,"id":67,"parentId":26,"tags":{},"startTime":1778962014992,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":569583,"timestamp":154042734953,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778962014981,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":558587,"timestamp":154042746444,"id":69,"parentId":28,"tags":{},"startTime":1778962014993,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":569939,"timestamp":154042735151,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778962014981,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":564008,"timestamp":154042746767,"id":70,"parentId":29,"tags":{},"startTime":1778962014993,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":575619,"timestamp":154042735226,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778962014981,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":565418,"timestamp":154042745653,"id":68,"parentId":27,"tags":{},"startTime":1778962014992,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":576064,"timestamp":154042735058,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778962014981,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":572656,"timestamp":154042745505,"id":66,"parentId":25,"tags":{},"startTime":1778962014992,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":583410,"timestamp":154042734816,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778962014981,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":576707,"timestamp":154042746923,"id":71,"parentId":30,"tags":{},"startTime":1778962014993,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":588326,"timestamp":154042735354,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778962014982,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":587232,"timestamp":154042747266,"id":74,"parentId":34,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":598706,"timestamp":154042735854,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778962014982,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":592311,"timestamp":154042747298,"id":75,"parentId":35,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":603720,"timestamp":154042735937,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778962014982,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":600011,"timestamp":154042747178,"id":73,"parentId":33,"tags":{},"startTime":1778962014993,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":611451,"timestamp":154042735782,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778962014982,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":606734,"timestamp":154042747367,"id":78,"parentId":38,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":617654,"timestamp":154042736494,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":612581,"timestamp":154042747390,"id":80,"parentId":40,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":623450,"timestamp":154042736622,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":616863,"timestamp":154042746983,"id":72,"parentId":32,"tags":{},"startTime":1778962014993,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":628207,"timestamp":154042735680,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778962014982,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":618003,"timestamp":154042747349,"id":77,"parentId":37,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":628987,"timestamp":154042736404,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":622825,"timestamp":154042747315,"id":76,"parentId":36,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":633901,"timestamp":154042736281,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":622880,"timestamp":154042747440,"id":84,"parentId":46,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":633020,"timestamp":154042737347,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778962014984,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":623586,"timestamp":154042747454,"id":85,"parentId":47,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":633661,"timestamp":154042737419,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778962014984,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":624303,"timestamp":154042747377,"id":79,"parentId":39,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":635164,"timestamp":154042736559,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":632737,"timestamp":154042747477,"id":87,"parentId":49,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":641225,"timestamp":154042739057,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778962014985,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":627933,"timestamp":154042752585,"id":90,"parentId":24,"tags":{},"startTime":1778962014999,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":648296,"timestamp":154042732271,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778962014979,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":633292,"timestamp":154042747491,"id":88,"parentId":50,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":641692,"timestamp":154042739141,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778962014985,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":635377,"timestamp":154042747464,"id":86,"parentId":48,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":644000,"timestamp":154042738885,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778962014985,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":638218,"timestamp":154042747404,"id":81,"parentId":42,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":648835,"timestamp":154042736878,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":631783,"timestamp":154042754165,"id":91,"parentId":31,"tags":{},"startTime":1778962015000,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":650519,"timestamp":154042735465,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778962014982,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":626886,"timestamp":154042759285,"id":93,"parentId":43,"tags":{},"startTime":1778962015006,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":649239,"timestamp":154042736967,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":639674,"timestamp":154042747417,"id":82,"parentId":44,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":649934,"timestamp":154042737197,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":640136,"timestamp":154042747504,"id":89,"parentId":51,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":648484,"timestamp":154042739196,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778962014985,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":643622,"timestamp":154042747426,"id":83,"parentId":45,"tags":{},"startTime":1778962014994,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":653802,"timestamp":154042737285,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778962014984,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":638214,"timestamp":154042755054,"id":92,"parentId":41,"tags":{},"startTime":1778962015001,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":656630,"timestamp":154042736679,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778962014983,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":631096,"timestamp":154042762350,"id":95,"parentId":52,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":654003,"timestamp":154042739473,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778962014986,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":638560,"timestamp":154042762554,"id":101,"parentId":59,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":660018,"timestamp":154042741142,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778962014987,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":646932,"timestamp":154042762578,"id":102,"parentId":61,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":667873,"timestamp":154042741699,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778962014988,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":662710,"timestamp":154042762594,"id":103,"parentId":62,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":683512,"timestamp":154042741844,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778962014988,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":668268,"timestamp":154042762612,"id":104,"parentId":63,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":688949,"timestamp":154042741984,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778962014988,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":663387,"timestamp":154042774739,"id":105,"parentId":60,"tags":{},"startTime":1778962015021,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":696858,"timestamp":154042741321,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778962014988,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":681069,"timestamp":154042762319,"id":94,"parentId":23,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":711399,"timestamp":154042732032,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778962014978,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":661159,"timestamp":154042785729,"id":106,"parentId":57,"tags":{},"startTime":1778962015032,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":706604,"timestamp":154042740318,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778962014987,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":686995,"timestamp":154042762383,"id":97,"parentId":54,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":709724,"timestamp":154042739694,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778962014986,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":689520,"timestamp":154042762395,"id":98,"parentId":55,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":712124,"timestamp":154042739835,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778962014986,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":689652,"timestamp":154042762412,"id":99,"parentId":56,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":712027,"timestamp":154042740066,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778962014986,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":691858,"timestamp":154042762427,"id":100,"parentId":58,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":713398,"timestamp":154042740925,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778962014987,"traceId":"1b41b9eb05b85e87"},{"name":"is-page-static","duration":692774,"timestamp":154042762367,"id":96,"parentId":53,"tags":{},"startTime":1778962015009,"traceId":"1b41b9eb05b85e87"},{"name":"check-page","duration":715576,"timestamp":154042739589,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778962014986,"traceId":"1b41b9eb05b85e87"},{"name":"static-check","duration":727802,"timestamp":154042727397,"id":19,"parentId":1,"tags":{},"startTime":1778962014974,"traceId":"1b41b9eb05b85e87"}]
2
- [{"name":"write-routes-manifest","duration":568,"timestamp":154043465638,"id":108,"parentId":1,"tags":{},"startTime":1778962015712,"traceId":"1b41b9eb05b85e87"},{"name":"load-dotenv","duration":108,"timestamp":154043479957,"id":111,"parentId":110,"tags":{},"startTime":1778962015726,"traceId":"1b41b9eb05b85e87"},{"name":"run-export-path-map","duration":523,"timestamp":154043482863,"id":112,"parentId":110,"tags":{},"startTime":1778962015729,"traceId":"1b41b9eb05b85e87"},{"name":"next-export","duration":564175,"timestamp":154043478144,"id":110,"parentId":1,"tags":{},"startTime":1778962015724,"traceId":"1b41b9eb05b85e87"},{"name":"move-exported-app-not-found-","duration":576,"timestamp":154044045525,"id":113,"parentId":109,"tags":{},"startTime":1778962016292,"traceId":"1b41b9eb05b85e87"},{"name":"move-exported-app-global-error-","duration":334,"timestamp":154044046194,"id":114,"parentId":109,"tags":{},"startTime":1778962016292,"traceId":"1b41b9eb05b85e87"},{"name":"static-generation","duration":577150,"timestamp":154043471078,"id":109,"parentId":1,"tags":{},"startTime":1778962015717,"traceId":"1b41b9eb05b85e87"},{"name":"write-routes-manifest","duration":368,"timestamp":154044048461,"id":115,"parentId":1,"tags":{},"startTime":1778962016295,"traceId":"1b41b9eb05b85e87"},{"name":"print-tree-view","duration":5626,"timestamp":154044066365,"id":116,"parentId":1,"tags":{},"startTime":1778962016313,"traceId":"1b41b9eb05b85e87"},{"name":"write-route-bundle-stats","duration":13463,"timestamp":154044072056,"id":117,"parentId":1,"tags":{},"startTime":1778962016318,"traceId":"1b41b9eb05b85e87"},{"name":"telemetry-flush","duration":17014,"timestamp":154044085558,"id":118,"parentId":1,"tags":{},"startTime":1778962016332,"traceId":"1b41b9eb05b85e87"},{"name":"next-build","duration":16844117,"timestamp":154027258492,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778961999505,"traceId":"1b41b9eb05b85e87"}]
1
+ [{"name":"generate-buildid","duration":309,"timestamp":154669439751,"id":4,"parentId":1,"tags":{},"startTime":1778962641686,"traceId":"c0f9356417c7d602"},{"name":"load-custom-routes","duration":471,"timestamp":154669440206,"id":5,"parentId":1,"tags":{},"startTime":1778962641686,"traceId":"c0f9356417c7d602"},{"name":"create-dist-dir","duration":696,"timestamp":154669440718,"id":6,"parentId":1,"tags":{},"startTime":1778962641687,"traceId":"c0f9356417c7d602"},{"name":"clean","duration":35796,"timestamp":154669442076,"id":7,"parentId":1,"tags":{},"startTime":1778962641688,"traceId":"c0f9356417c7d602"},{"name":"discover-routes","duration":11744,"timestamp":154669568377,"id":8,"parentId":1,"tags":{},"startTime":1778962641815,"traceId":"c0f9356417c7d602"},{"name":"create-root-mapping","duration":119,"timestamp":154669580183,"id":9,"parentId":1,"tags":{},"startTime":1778962641826,"traceId":"c0f9356417c7d602"},{"name":"generate-route-types","duration":37107,"timestamp":154669583036,"id":10,"parentId":1,"tags":{},"startTime":1778962641829,"traceId":"c0f9356417c7d602"},{"name":"public-dir-conflict-check","duration":108,"timestamp":154669620234,"id":11,"parentId":1,"tags":{},"startTime":1778962641867,"traceId":"c0f9356417c7d602"},{"name":"generate-routes-manifest","duration":5866,"timestamp":154669620469,"id":12,"parentId":1,"tags":{},"startTime":1778962641867,"traceId":"c0f9356417c7d602"},{"name":"run-turbopack","duration":5711325,"timestamp":154669631874,"id":14,"parentId":1,"tags":{},"startTime":1778962641878,"traceId":"c0f9356417c7d602"},{"name":"turbopack-build-events","duration":102,"timestamp":154669919347,"id":15,"parentId":1,"tags":{},"startTime":1778962642166,"traceId":"c0f9356417c7d602"},{"name":"run-typescript","duration":9297881,"timestamp":154675355302,"id":16,"parentId":1,"tags":{},"startTime":1778962647602,"traceId":"c0f9356417c7d602"},{"name":"generate-required-server-files","duration":2936,"timestamp":154684654459,"id":18,"parentId":1,"tags":{},"startTime":1778962656901,"traceId":"c0f9356417c7d602"},{"name":"check-static-error-page","duration":13330,"timestamp":154684819756,"id":20,"parentId":19,"tags":{},"startTime":1778962657066,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":485001,"timestamp":154684835946,"id":65,"parentId":22,"tags":{},"startTime":1778962657082,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":498991,"timestamp":154684822154,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778962657068,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":561105,"timestamp":154684836098,"id":66,"parentId":25,"tags":{},"startTime":1778962657082,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":572332,"timestamp":154684824978,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778962657071,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":571371,"timestamp":154684837728,"id":69,"parentId":28,"tags":{},"startTime":1778962657084,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":583735,"timestamp":154684825438,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778962657072,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":587275,"timestamp":154684838056,"id":70,"parentId":29,"tags":{},"startTime":1778962657084,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":599853,"timestamp":154684825548,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778962657072,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":593940,"timestamp":154684836204,"id":67,"parentId":26,"tags":{},"startTime":1778962657082,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":605036,"timestamp":154684825189,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778962657071,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":600903,"timestamp":154684838300,"id":72,"parentId":32,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":613161,"timestamp":154684826118,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778962657072,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":613126,"timestamp":154684837600,"id":68,"parentId":27,"tags":{},"startTime":1778962657084,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":625492,"timestamp":154684825316,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778962657072,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":612533,"timestamp":154684838465,"id":73,"parentId":33,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":624829,"timestamp":154684826224,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778962657072,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":622966,"timestamp":154684838579,"id":75,"parentId":35,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":635225,"timestamp":154684826396,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":623451,"timestamp":154684838541,"id":74,"parentId":34,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":635754,"timestamp":154684826308,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":633100,"timestamp":154684838673,"id":80,"parentId":40,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":644730,"timestamp":154684827093,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":633543,"timestamp":154684838601,"id":76,"parentId":36,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":645474,"timestamp":154684826713,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":638933,"timestamp":154684838696,"id":82,"parentId":44,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":649772,"timestamp":154684827901,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778962657074,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":639644,"timestamp":154684838229,"id":71,"parentId":30,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":652216,"timestamp":154684825691,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778962657072,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":643878,"timestamp":154684838645,"id":78,"parentId":38,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":655635,"timestamp":154684826928,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":644093,"timestamp":154684838710,"id":83,"parentId":45,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":654793,"timestamp":154684828053,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778962657074,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":644413,"timestamp":154684838722,"id":84,"parentId":46,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":655013,"timestamp":154684828174,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778962657074,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":650200,"timestamp":154684838732,"id":85,"parentId":47,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":660679,"timestamp":154684828296,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778962657075,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":653632,"timestamp":154684835538,"id":64,"parentId":21,"tags":{},"startTime":1778962657082,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":668226,"timestamp":154684820973,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778962657067,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":650563,"timestamp":154684838745,"id":86,"parentId":48,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":660919,"timestamp":154684828413,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778962657075,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":650832,"timestamp":154684838659,"id":79,"parentId":39,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":662533,"timestamp":154684826987,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":651463,"timestamp":154684838775,"id":87,"parentId":49,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":661732,"timestamp":154684828551,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778962657075,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":653614,"timestamp":154684838631,"id":77,"parentId":37,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":665444,"timestamp":154684826840,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":654264,"timestamp":154684842114,"id":90,"parentId":24,"tags":{},"startTime":1778962657088,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":673846,"timestamp":154684822574,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778962657069,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":657781,"timestamp":154684838787,"id":88,"parentId":50,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":666539,"timestamp":154684830064,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778962657076,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":655918,"timestamp":154684843273,"id":91,"parentId":31,"tags":{},"startTime":1778962657090,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":673392,"timestamp":154684825841,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778962657072,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":658733,"timestamp":154684844141,"id":92,"parentId":41,"tags":{},"startTime":1778962657090,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":675739,"timestamp":154684827197,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778962657073,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":663715,"timestamp":154684845446,"id":93,"parentId":43,"tags":{},"startTime":1778962657092,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":681597,"timestamp":154684827604,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778962657074,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":670873,"timestamp":154684838683,"id":81,"parentId":42,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":682133,"timestamp":154684827463,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778962657074,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":705517,"timestamp":154684838803,"id":89,"parentId":51,"tags":{},"startTime":1778962657085,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":714222,"timestamp":154684830166,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778962657076,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":701889,"timestamp":154684850711,"id":100,"parentId":58,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":720658,"timestamp":154684831999,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778962657078,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":704906,"timestamp":154684850651,"id":95,"parentId":52,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":725097,"timestamp":154684830514,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778962657077,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":708461,"timestamp":154684850844,"id":101,"parentId":59,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":727166,"timestamp":154684832201,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778962657078,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":710319,"timestamp":154684850867,"id":102,"parentId":61,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":728540,"timestamp":154684832686,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778962657079,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":716863,"timestamp":154684850676,"id":97,"parentId":54,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":736781,"timestamp":154684830811,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778962657077,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":717106,"timestamp":154684850698,"id":99,"parentId":56,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":736620,"timestamp":154684831218,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778962657077,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":717128,"timestamp":154684850889,"id":104,"parentId":63,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":735165,"timestamp":154684832894,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778962657079,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":720474,"timestamp":154684850689,"id":98,"parentId":55,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":740240,"timestamp":154684830989,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778962657077,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":721056,"timestamp":154684850663,"id":96,"parentId":53,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":741103,"timestamp":154684830669,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778962657077,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":724040,"timestamp":154684850623,"id":94,"parentId":23,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":752364,"timestamp":154684822365,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778962657069,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":708607,"timestamp":154684866789,"id":105,"parentId":57,"tags":{},"startTime":1778962657113,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":743974,"timestamp":154684831468,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778962657078,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":699547,"timestamp":154684876019,"id":106,"parentId":60,"tags":{},"startTime":1778962657122,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":743223,"timestamp":154684832365,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778962657079,"traceId":"c0f9356417c7d602"},{"name":"is-page-static","duration":729481,"timestamp":154684850877,"id":103,"parentId":62,"tags":{},"startTime":1778962657097,"traceId":"c0f9356417c7d602"},{"name":"check-page","duration":747617,"timestamp":154684832800,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778962657079,"traceId":"c0f9356417c7d602"},{"name":"static-check","duration":761634,"timestamp":154684818868,"id":19,"parentId":1,"tags":{},"startTime":1778962657065,"traceId":"c0f9356417c7d602"}]
2
+ [{"name":"write-routes-manifest","duration":622,"timestamp":154685592843,"id":108,"parentId":1,"tags":{},"startTime":1778962657839,"traceId":"c0f9356417c7d602"},{"name":"load-dotenv","duration":49,"timestamp":154685607526,"id":111,"parentId":110,"tags":{},"startTime":1778962657854,"traceId":"c0f9356417c7d602"},{"name":"run-export-path-map","duration":587,"timestamp":154685612888,"id":112,"parentId":110,"tags":{},"startTime":1778962657859,"traceId":"c0f9356417c7d602"},{"name":"next-export","duration":647640,"timestamp":154685606285,"id":110,"parentId":1,"tags":{},"startTime":1778962657853,"traceId":"c0f9356417c7d602"},{"name":"move-exported-app-not-found-","duration":582,"timestamp":154686257489,"id":113,"parentId":109,"tags":{},"startTime":1778962658504,"traceId":"c0f9356417c7d602"},{"name":"move-exported-app-global-error-","duration":392,"timestamp":154686258167,"id":114,"parentId":109,"tags":{},"startTime":1778962658504,"traceId":"c0f9356417c7d602"},{"name":"static-generation","duration":661988,"timestamp":154685598525,"id":109,"parentId":1,"tags":{},"startTime":1778962657845,"traceId":"c0f9356417c7d602"},{"name":"write-routes-manifest","duration":419,"timestamp":154686260749,"id":115,"parentId":1,"tags":{},"startTime":1778962658507,"traceId":"c0f9356417c7d602"},{"name":"print-tree-view","duration":4601,"timestamp":154686275921,"id":116,"parentId":1,"tags":{},"startTime":1778962658522,"traceId":"c0f9356417c7d602"},{"name":"write-route-bundle-stats","duration":12742,"timestamp":154686280557,"id":117,"parentId":1,"tags":{},"startTime":1778962658527,"traceId":"c0f9356417c7d602"},{"name":"telemetry-flush","duration":24405,"timestamp":154686293329,"id":118,"parentId":1,"tags":{},"startTime":1778962658540,"traceId":"c0f9356417c7d602"},{"name":"next-build","duration":16927416,"timestamp":154669390359,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778962641637,"traceId":"c0f9356417c7d602"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":5661020,"timestamp":154027499564,"id":14,"parentId":1,"tags":{},"startTime":1778961999746,"traceId":"1b41b9eb05b85e87"},{"name":"turbopack-build-events","duration":72,"timestamp":154027788854,"id":15,"parentId":1,"tags":{},"startTime":1778962000035,"traceId":"1b41b9eb05b85e87"},{"name":"run-typescript","duration":9386957,"timestamp":154033169233,"id":16,"parentId":1,"tags":{},"startTime":1778962005416,"traceId":"1b41b9eb05b85e87"},{"name":"static-check","duration":727802,"timestamp":154042727397,"id":19,"parentId":1,"tags":{},"startTime":1778962014974,"traceId":"1b41b9eb05b85e87"},{"name":"static-generation","duration":577150,"timestamp":154043471078,"id":109,"parentId":1,"tags":{},"startTime":1778962015717,"traceId":"1b41b9eb05b85e87"},{"name":"telemetry-flush","duration":17014,"timestamp":154044085558,"id":118,"parentId":1,"tags":{},"startTime":1778962016332,"traceId":"1b41b9eb05b85e87"},{"name":"next-build","duration":16844117,"timestamp":154027258492,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778961999505,"traceId":"1b41b9eb05b85e87"}]
1
+ [{"name":"run-turbopack","duration":5711325,"timestamp":154669631874,"id":14,"parentId":1,"tags":{},"startTime":1778962641878,"traceId":"c0f9356417c7d602"},{"name":"turbopack-build-events","duration":102,"timestamp":154669919347,"id":15,"parentId":1,"tags":{},"startTime":1778962642166,"traceId":"c0f9356417c7d602"},{"name":"run-typescript","duration":9297881,"timestamp":154675355302,"id":16,"parentId":1,"tags":{},"startTime":1778962647602,"traceId":"c0f9356417c7d602"},{"name":"static-check","duration":761634,"timestamp":154684818868,"id":19,"parentId":1,"tags":{},"startTime":1778962657065,"traceId":"c0f9356417c7d602"},{"name":"static-generation","duration":661988,"timestamp":154685598525,"id":109,"parentId":1,"tags":{},"startTime":1778962657845,"traceId":"c0f9356417c7d602"},{"name":"telemetry-flush","duration":24405,"timestamp":154686293329,"id":118,"parentId":1,"tags":{},"startTime":1778962658540,"traceId":"c0f9356417c7d602"},{"name":"next-build","duration":16927416,"timestamp":154669390359,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778962641637,"traceId":"c0f9356417c7d602"}]
@@ -2157,7 +2157,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2157
2157
  at the chip-count scope. Sibling edits on the
2158
2158
  online + active-links chip digits below. data-
2159
2159
  working-chip-digit attr exposes the digit span. */}
2160
- <span className="font-semibold" data-working-chip-digit>{workingCount}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-working-chip-unit> working</span>
2160
+ <span className="font-semibold transition-[font-weight] duration-200 group-hover:font-bold" data-working-chip-digit>{workingCount}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-working-chip-unit> working</span>
2161
2161
  </span>
2162
2162
  <span
2163
2163
  // Round 201 / Loop: online chip — mirror of the working
@@ -2225,7 +2225,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2225
2225
  >
2226
2226
  {/* R337 sibling — online chip unit demotion. */}
2227
2227
  {/* R362 sibling — online-chip digit gains font-semibold. */}
2228
- <span className="font-semibold" data-online-chip-digit>{onlineNodes.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-online-chip-unit> online</span>
2228
+ <span className="font-semibold transition-[font-weight] duration-200 group-hover:font-bold" data-online-chip-digit>{onlineNodes.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-online-chip-unit> online</span>
2229
2229
  </span>
2230
2230
  </>
2231
2231
  );
@@ -3252,7 +3252,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
3252
3252
  chip-internal-hierarchy arc. data-active-links-
3253
3253
  chip-unit exposes the unit span for tests. */}
3254
3254
  {/* R362 sibling — active-links chip digit gains font-semibold. */}
3255
- <span className="font-semibold" data-active-links-chip-digit>{flowLinks.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-active-links-chip-unit> active link{flowLinks.length === 1 ? '' : 's'}</span>
3255
+ <span className="font-semibold transition-[font-weight] duration-200 group-hover:font-bold" data-active-links-chip-digit>{flowLinks.length}</span><span className="opacity-70 transition-opacity duration-200 group-hover:opacity-100" data-active-links-chip-unit> active link{flowLinks.length === 1 ? '' : 's'}</span>
3256
3256
  {rel ? (() => {
3257
3257
  // Round 161 / Loop: extend R160's recency-pip
3258
3258
  // vocabulary up one scope — from per-flow row to
@@ -3994,6 +3994,40 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
3994
3994
  // node radius. Geometry-safe; paint-only. R51 sentinel
3995
3995
  // strokeWidth 1.5/3 untouched (idle=1, active=2). data-
3996
3996
  // topo-hub-spoke-linecap attr exposes the value for tests.
3997
+ // Round 415 / Loop: hub-spoke active strokeWidth 2 → 2.25.
3998
+ // Pairs with R391 (active opacity 0.7 → 0.8) so the same
3999
+ // active-state path lifts BOTH stroke weight AND opacity
4000
+ // in concert. Pre-R415 active strokes sat at sw=2 — clear
4001
+ // step over idle sw=1, but a touch lighter than the
4002
+ // weight family's other "active" indicators (R385 hub
4003
+ // hover-ring sw=1.75 / R402 legend pin-ring sw=1.75 /
4004
+ // R367 edge-badge rest sw=1.25). R415 bumps to 2.25 so
4005
+ // the active spoke reads with proportional weight to its
4006
+ // role — the line connecting the focal point to the
4007
+ // active node deserves the heaviest active stroke in the
4008
+ // family (after pin/hot edge-badge sw=2). Stays clear of
4009
+ // R51 sentinels (1.5 / 3) at 2.25.
4010
+ // Visual-weight bump family (14 anchors now):
4011
+ // R287 minimap viewport stroke 1 → 1.5
4012
+ // R295 legend swatch radius 5.5 → 6
4013
+ // R359 recent-row pip radius 1.6 → 1.8
4014
+ // R360 hub digit fontSize 11 → 12
4015
+ // R361 edge-badge digit fontSize 10 → 11
4016
+ // R365 hub-highlight radius 5 → 5.5
4017
+ // R367 edge-badge rest stroke 1 → 1.25
4018
+ // R374 pressure-bar height 1.5 → 2
4019
+ // R383 recent-row pip radius 1.8 → 2.0
4020
+ // R384 minimap online dot 1.7 → 1.9
4021
+ // R385 hub hover-ring stroke 1.5 → 1.75
4022
+ // R402 legend pin-ring stroke 1.5 → 1.75
4023
+ // R408 hub-halo radius 18 → 20
4024
+ // R415 hub-spoke active stroke 2 → 2.25 (this round)
4025
+ // R382 strokeLinecap='round' + R391 opacity 0.45/0.8 +
4026
+ // R51-safe idle sw=1 all preserved. 250ms transition
4027
+ // list already covers stroke-width — the new tier eases
4028
+ // naturally. data-topo-hub-spoke-stroke-width-active
4029
+ // attr surfaces the active value for tests.
4030
+ //
3997
4031
  // Round 391 / Loop: hub-spoke active opacity 0.7 → 0.8.
3998
4032
  // Pre-R391 active spokes (the spoke connecting the hub
3999
4033
  // to the currently-active alias — hovered or pinned)
@@ -4025,7 +4059,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4025
4059
  d={path}
4026
4060
  fill="none"
4027
4061
  stroke={isActiveSpoke ? pal.spokeStroke.active : pal.spokeStroke.idle}
4028
- strokeWidth={isActiveSpoke ? 2 : 1}
4062
+ strokeWidth={isActiveSpoke ? 2.25 : 1}
4029
4063
  strokeDasharray={isActiveSpoke ? 'none' : '6 14'}
4030
4064
  strokeLinecap="round"
4031
4065
  opacity={isActiveSpoke ? 0.8 : 0.45}
@@ -4034,6 +4068,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4034
4068
  data-topo-spoke-dur={isActiveSpoke ? undefined : spokeDur}
4035
4069
  data-topo-hub-spoke-active={isActiveSpoke ? 'true' : 'false'}
4036
4070
  data-topo-hub-spoke-opacity={isActiveSpoke ? 0.8 : 0.45}
4071
+ data-topo-hub-spoke-stroke-width-active="2.25"
4037
4072
  data-topo-hub-spoke-linecap="round"
4038
4073
  style={{
4039
4074
  transition: 'stroke 250ms ease-out, stroke-width 250ms ease-out, opacity 250ms ease-out',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.75",
3
+ "version": "0.5.1-preview.77",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,94 @@
1
+ /* Round 416 verification (100-round milestone): chip-row chip digits
2
+ * gain group-hover:font-bold. Extends chip-internal-hierarchy with a
3
+ * hover-state weight lift — digits lift from fw=600 (R362 font-semibold)
4
+ * to fw=700 (font-bold) on chip hover, matching the R414 unit-brighten
5
+ * gesture at the same scope.
6
+ *
7
+ * Contract:
8
+ * - 3 chip digits with class tokens:
9
+ * * font-semibold (rest)
10
+ * * group-hover:font-bold
11
+ * * transition-[font-weight] duration-200
12
+ * - Parent chip className has `group` (R414 invariant)
13
+ * - Pre-R416 invariants:
14
+ * * data-*-chip-digit attrs present
15
+ * * unit spans group-hover:opacity-100 (R414 invariant)
16
+ */
17
+ import { chromium } from 'playwright';
18
+ import { readFileSync } from 'node:fs';
19
+
20
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
21
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
22
+
23
+ const browser = await chromium.launch({ headless: true });
24
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
25
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
26
+ await ctx.addInitScript(() => {
27
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
28
+ });
29
+ await ctx.route('**/api/hub/status*', async (route) => {
30
+ const r = await route.fetch();
31
+ const b = await r.json();
32
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
33
+ const mk = (alias, status) => ({
34
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
35
+ network_id: nid, project_dir: null,
36
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
37
+ });
38
+ await route.fulfill({ response: r, json: { ...b, sessions: [
39
+ mk('alpha', 'working'),
40
+ mk('beta', 'idle'),
41
+ ] } });
42
+ });
43
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({
44
+ json: { messages: [
45
+ { id: 'm1', from_alias: 'alpha', to_alias: 'beta', content: 'ping', created_at: fresh, network_id: 'default' },
46
+ ] },
47
+ }));
48
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
49
+
50
+ const page = await ctx.newPage();
51
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
52
+ await page.waitForSelector('[data-working-chip-digit]', { timeout: 15000 });
53
+ await page.waitForTimeout(400);
54
+
55
+ const probe = await page.evaluate(() => {
56
+ const read = (selector) => {
57
+ const el = document.querySelector(selector);
58
+ return el ? {
59
+ className: el.className,
60
+ parentHasGroup: el.parentElement?.className.includes('group') === true,
61
+ } : null;
62
+ };
63
+ return {
64
+ working: read('[data-working-chip-digit]'),
65
+ online: read('[data-online-chip-digit]'),
66
+ activeLinks: read('[data-active-links-chip-digit]'),
67
+ };
68
+ });
69
+
70
+ await browser.close();
71
+
72
+ const check = (digit) => digit &&
73
+ digit.className.includes('font-semibold') &&
74
+ digit.className.includes('group-hover:font-bold') &&
75
+ digit.className.includes('transition-[font-weight]') &&
76
+ digit.className.includes('duration-200') &&
77
+ digit.parentHasGroup;
78
+
79
+ const results = {
80
+ // All 3 chip digits mounted
81
+ working_digit_mounted: !!probe.working,
82
+ online_digit_mounted: !!probe.online,
83
+ active_digit_mounted: !!probe.activeLinks,
84
+ // Each has all R416 + R414 invariants
85
+ working_full_set: check(probe.working),
86
+ online_full_set: check(probe.online),
87
+ active_full_set: check(probe.activeLinks),
88
+ };
89
+ const ok = Object.values(results).every(Boolean);
90
+ console.log(`${ok ? '✅' : '❌'} chip-row chip digit group-hover:font-bold (R416 milestone):`, JSON.stringify(results),
91
+ '\n working:', probe.working?.className,
92
+ '\n online: ', probe.online?.className,
93
+ '\n active: ', probe.activeLinks?.className);
94
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,95 @@
1
+ /* Round 415 verification: hub-spoke active strokeWidth 2 → 2.25.
2
+ * Visual-weight bump family 14th anchor — active-spoke stroke
3
+ * thickens to match its role as the focal connection. Pairs with
4
+ * R391 opacity 0.7 → 0.8 so the same active path lifts both
5
+ * stroke AND opacity in concert.
6
+ *
7
+ * Contract:
8
+ * - Seed a flow link so a node becomes active (R243 isActive gate)
9
+ * - The active spoke <path>:
10
+ * * stroke-width attr === '2.25'
11
+ * * data-topo-hub-spoke-stroke-width-active === '2.25'
12
+ * * data-topo-hub-spoke-opacity === '0.8' (R391 invariant)
13
+ * * stroke-linecap === 'round' (R382 invariant)
14
+ * - Idle spokes (no flow): stroke-width === '1' (R415 doesn't touch idle)
15
+ */
16
+ import { chromium } from 'playwright';
17
+ import { readFileSync } from 'node:fs';
18
+
19
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
20
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
21
+
22
+ const browser = await chromium.launch({ headless: true });
23
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
24
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
25
+ await ctx.addInitScript(() => {
26
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
27
+ });
28
+ await ctx.route('**/api/hub/status*', async (route) => {
29
+ const r = await route.fetch();
30
+ const b = await r.json();
31
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
32
+ const mk = (alias) => ({
33
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
34
+ network_id: nid, project_dir: null,
35
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
36
+ });
37
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('alpha'), mk('beta'), mk('gamma') ] } });
38
+ });
39
+ // Seed flow alpha→beta so alpha + beta spokes become active
40
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({
41
+ json: { messages: [
42
+ { id: 'm1', from_alias: 'alpha', to_alias: 'beta', content: 'ping', created_at: fresh, network_id: 'default' },
43
+ ] },
44
+ }));
45
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
46
+
47
+ const page = await ctx.newPage();
48
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
49
+ await page.waitForSelector('[data-topo-hub-spoke-active]', { timeout: 15000 });
50
+ await page.waitForTimeout(500);
51
+
52
+ const probe = await page.evaluate(() => {
53
+ const spokes = Array.from(document.querySelectorAll('[data-topo-hub-spoke-active]'));
54
+ const active = spokes.filter((s) => s.getAttribute('data-topo-hub-spoke-active') === 'true');
55
+ const idle = spokes.filter((s) => s.getAttribute('data-topo-hub-spoke-active') === 'false');
56
+ const read = (el) => el ? ({
57
+ strokeWidth: el.getAttribute('stroke-width'),
58
+ strokeWidthData: el.getAttribute('data-topo-hub-spoke-stroke-width-active'),
59
+ opacity: el.getAttribute('opacity'),
60
+ opacityData: el.getAttribute('data-topo-hub-spoke-opacity'),
61
+ linecap: el.getAttribute('stroke-linecap'),
62
+ }) : null;
63
+ return {
64
+ total: spokes.length,
65
+ activeCount: active.length,
66
+ idleCount: idle.length,
67
+ activeSample: read(active[0]),
68
+ idleSample: read(idle[0]),
69
+ };
70
+ });
71
+
72
+ await browser.close();
73
+
74
+ const results = {
75
+ // 3 spokes total (alpha, beta, gamma)
76
+ total_3_spokes: probe.total === 3,
77
+ // alpha + beta active (flow link)
78
+ active_2_spokes: probe.activeCount === 2,
79
+ idle_1_spoke: probe.idleCount === 1,
80
+ // R415: active strokeWidth '2.25'
81
+ active_strokeWidth_2_25: probe.activeSample?.strokeWidth === '2.25',
82
+ active_data_2_25: probe.activeSample?.strokeWidthData === '2.25',
83
+ // R391 opacity invariant
84
+ active_opacity_0_8: probe.activeSample?.opacity === '0.8',
85
+ // R382 linecap invariant
86
+ active_linecap_round: probe.activeSample?.linecap === 'round',
87
+ // Idle invariant: strokeWidth '1' (R415 doesn't touch idle)
88
+ idle_strokeWidth_1: probe.idleSample?.strokeWidth === '1',
89
+ idle_opacity_0_45: probe.idleSample?.opacity === '0.45',
90
+ };
91
+ const ok = Object.values(results).every(Boolean);
92
+ console.log(`${ok ? '✅' : '❌'} hub-spoke active strokeWidth 2 → 2.25:`, JSON.stringify(results),
93
+ '\n active:', probe.activeSample,
94
+ '\n idle: ', probe.idleSample);
95
+ process.exit(ok ? 0 : 1);