@sleep2agi/agent-network-dashboard 0.4.6-preview.242 → 0.4.6-preview.244

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 (143) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found.html +1 -1
  14. package/.next/server/app/_not-found.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  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 +1 -1
  21. package/.next/server/app/admin.html +1 -1
  22. package/.next/server/app/admin.rsc +1 -1
  23. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  29. package/.next/server/app/index.html +2 -2
  30. package/.next/server/app/index.rsc +2 -2
  31. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/login.html +2 -2
  38. package/.next/server/app/login.rsc +2 -2
  39. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  40. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  45. package/.next/server/app/logs.html +1 -1
  46. package/.next/server/app/logs.rsc +1 -1
  47. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  52. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  53. package/.next/server/app/messages.html +1 -1
  54. package/.next/server/app/messages.rsc +1 -1
  55. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  61. package/.next/server/app/node.html +1 -1
  62. package/.next/server/app/node.rsc +1 -1
  63. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  68. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  69. package/.next/server/app/nodes.html +1 -1
  70. package/.next/server/app/nodes.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  76. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  77. package/.next/server/app/page_client-reference-manifest.js +1 -1
  78. package/.next/server/app/server-logs.html +1 -1
  79. package/.next/server/app/server-logs.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  85. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  86. package/.next/server/app/settings/networks.html +1 -1
  87. package/.next/server/app/settings/networks.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  94. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  95. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  96. package/.next/server/app/settings/tokens.html +1 -1
  97. package/.next/server/app/settings/tokens.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  104. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  105. package/.next/server/app/settings.html +2 -2
  106. package/.next/server/app/settings.rsc +2 -2
  107. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  108. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  111. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  112. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/tasks.html +1 -1
  114. package/.next/server/app/tasks.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  120. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  121. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  126. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  127. package/.next/server/middleware-build-manifest.js +3 -3
  128. package/.next/server/pages/404.html +1 -1
  129. package/.next/server/pages/500.html +1 -1
  130. package/.next/server/server-reference-manifest.js +1 -1
  131. package/.next/server/server-reference-manifest.json +1 -1
  132. package/.next/static/chunks/{0gerpsly~_6fl.js → 0i79q~nw7etdd.js} +1 -1
  133. package/.next/static/chunks/{13osd8c898abq.js → 0ojt85l8ux7fz.js} +1 -1
  134. package/.next/static/chunks/{12qu.7mor-xyq.js → 1604_nnwkc4dm.js} +1 -1
  135. package/.next/trace +2 -2
  136. package/.next/trace-build +1 -1
  137. package/app/components/TopoGraph.tsx +50 -1
  138. package/package.json +1 -1
  139. package/scripts/topo-pin-intersection-color-ease-test.mjs +111 -0
  140. package/scripts/topo-pin-intersection-warning-crossfade-test.mjs +107 -0
  141. /package/.next/static/{uXA_PKjut1-I0U4z-hgVu → AP-TrnQybmyXaqbyUjT2e}/_buildManifest.js +0 -0
  142. /package/.next/static/{uXA_PKjut1-I0U4z-hgVu → AP-TrnQybmyXaqbyUjT2e}/_clientMiddlewareManifest.js +0 -0
  143. /package/.next/static/{uXA_PKjut1-I0U4z-hgVu → AP-TrnQybmyXaqbyUjT2e}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.242"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.244"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.242"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.6-preview.244"],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":291,"timestamp":87506115601,"id":4,"parentId":1,"tags":{},"startTime":1778895478362,"traceId":"133d17b228d20a64"},{"name":"load-custom-routes","duration":680,"timestamp":87506116079,"id":5,"parentId":1,"tags":{},"startTime":1778895478362,"traceId":"133d17b228d20a64"},{"name":"create-dist-dir","duration":796,"timestamp":87506116814,"id":6,"parentId":1,"tags":{},"startTime":1778895478363,"traceId":"133d17b228d20a64"},{"name":"clean","duration":453,"timestamp":87506118339,"id":7,"parentId":1,"tags":{},"startTime":1778895478365,"traceId":"133d17b228d20a64"},{"name":"discover-routes","duration":11223,"timestamp":87506205550,"id":8,"parentId":1,"tags":{},"startTime":1778895478452,"traceId":"133d17b228d20a64"},{"name":"create-root-mapping","duration":98,"timestamp":87506216830,"id":9,"parentId":1,"tags":{},"startTime":1778895478463,"traceId":"133d17b228d20a64"},{"name":"generate-route-types","duration":35243,"timestamp":87506220271,"id":10,"parentId":1,"tags":{},"startTime":1778895478467,"traceId":"133d17b228d20a64"},{"name":"public-dir-conflict-check","duration":98,"timestamp":87506255673,"id":11,"parentId":1,"tags":{},"startTime":1778895478502,"traceId":"133d17b228d20a64"},{"name":"generate-routes-manifest","duration":4569,"timestamp":87506255889,"id":12,"parentId":1,"tags":{},"startTime":1778895478502,"traceId":"133d17b228d20a64"},{"name":"run-turbopack","duration":10623444,"timestamp":87506266813,"id":14,"parentId":1,"tags":{},"startTime":1778895478513,"traceId":"133d17b228d20a64"},{"name":"turbopack-build-events","duration":102,"timestamp":87506642496,"id":15,"parentId":1,"tags":{},"startTime":1778895478889,"traceId":"133d17b228d20a64"},{"name":"run-typescript","duration":13418337,"timestamp":87516947767,"id":16,"parentId":1,"tags":{},"startTime":1778895489194,"traceId":"133d17b228d20a64"},{"name":"generate-required-server-files","duration":2486,"timestamp":87530367133,"id":18,"parentId":1,"tags":{},"startTime":1778895502613,"traceId":"133d17b228d20a64"},{"name":"check-static-error-page","duration":21280,"timestamp":87530642425,"id":20,"parentId":19,"tags":{},"startTime":1778895502889,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":911250,"timestamp":87530668228,"id":64,"parentId":25,"tags":{},"startTime":1778895502915,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":931029,"timestamp":87530648623,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778895502895,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":960866,"timestamp":87530670970,"id":69,"parentId":30,"tags":{},"startTime":1778895502917,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":982447,"timestamp":87530649494,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778895502896,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":977950,"timestamp":87530671185,"id":70,"parentId":32,"tags":{},"startTime":1778895502917,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":999318,"timestamp":87530649913,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778895502896,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":989473,"timestamp":87530668064,"id":63,"parentId":22,"tags":{},"startTime":1778895502914,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1012050,"timestamp":87530645577,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778895502892,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":997636,"timestamp":87530670633,"id":67,"parentId":28,"tags":{},"startTime":1778895502917,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1019141,"timestamp":87530649203,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778895502895,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1009997,"timestamp":87530671263,"id":71,"parentId":33,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1031235,"timestamp":87530650089,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778895502896,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1011151,"timestamp":87530671379,"id":73,"parentId":35,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1032172,"timestamp":87530650413,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778895502897,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1022967,"timestamp":87530671497,"id":74,"parentId":36,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1042446,"timestamp":87530652076,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778895502898,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1032547,"timestamp":87530671554,"id":76,"parentId":38,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1051713,"timestamp":87530652464,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1039873,"timestamp":87530671564,"id":77,"parentId":39,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1058898,"timestamp":87530652588,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1052596,"timestamp":87530671578,"id":78,"parentId":40,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1071518,"timestamp":87530652712,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1069929,"timestamp":87530671534,"id":75,"parentId":37,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1089222,"timestamp":87530652303,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1071309,"timestamp":87530671591,"id":79,"parentId":41,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1090119,"timestamp":87530652830,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1088704,"timestamp":87530671605,"id":80,"parentId":42,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1107434,"timestamp":87530652937,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1089736,"timestamp":87530671614,"id":81,"parentId":43,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1108341,"timestamp":87530653067,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1105723,"timestamp":87530667639,"id":62,"parentId":21,"tags":{},"startTime":1778895502914,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1129419,"timestamp":87530643996,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778895502890,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1102738,"timestamp":87530671640,"id":83,"parentId":45,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1121128,"timestamp":87530653320,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778895502900,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1113557,"timestamp":87530671666,"id":85,"parentId":47,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1131700,"timestamp":87530653579,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778895502900,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1122622,"timestamp":87530671627,"id":82,"parentId":44,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1141115,"timestamp":87530653187,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778895502899,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1122809,"timestamp":87530671679,"id":86,"parentId":48,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1138460,"timestamp":87530656132,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778895502902,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1136751,"timestamp":87530670809,"id":68,"parentId":29,"tags":{},"startTime":1778895502917,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1158465,"timestamp":87530649333,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778895502896,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1108427,"timestamp":87530705648,"id":89,"parentId":31,"tags":{},"startTime":1778895502952,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1164524,"timestamp":87530649619,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778895502896,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1116136,"timestamp":87530704411,"id":88,"parentId":24,"tags":{},"startTime":1778895502951,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1174498,"timestamp":87530646103,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778895502892,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1159462,"timestamp":87530671344,"id":72,"parentId":34,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1180601,"timestamp":87530650256,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778895502897,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1163174,"timestamp":87530670363,"id":66,"parentId":27,"tags":{},"startTime":1778895502917,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1184547,"timestamp":87530649041,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778895502895,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1197747,"timestamp":87530671692,"id":87,"parentId":49,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1213264,"timestamp":87530656262,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778895502903,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1160830,"timestamp":87530784203,"id":91,"parentId":50,"tags":{},"startTime":1778895503030,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1288433,"timestamp":87530656692,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778895502903,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1285782,"timestamp":87530671656,"id":84,"parentId":46,"tags":{},"startTime":1778895502918,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1304083,"timestamp":87530653437,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778895502900,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1177992,"timestamp":87530784256,"id":95,"parentId":54,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1304750,"timestamp":87530657566,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778895502904,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1186157,"timestamp":87530784266,"id":96,"parentId":56,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1311459,"timestamp":87530659032,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778895502905,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1186364,"timestamp":87530784283,"id":97,"parentId":57,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1311407,"timestamp":87530659279,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778895502906,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1194081,"timestamp":87530784146,"id":90,"parentId":23,"tags":{},"startTime":1778895503030,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1332436,"timestamp":87530645844,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778895502892,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1206318,"timestamp":87530784297,"id":98,"parentId":59,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1327608,"timestamp":87530663081,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778895502909,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1208275,"timestamp":87530784243,"id":94,"parentId":53,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1335231,"timestamp":87530657333,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778895502904,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1189182,"timestamp":87530812047,"id":102,"parentId":58,"tags":{},"startTime":1778895503058,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1341795,"timestamp":87530659479,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778895502906,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1219340,"timestamp":87530784311,"id":99,"parentId":60,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1340444,"timestamp":87530663265,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778895502910,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1219459,"timestamp":87530784329,"id":100,"parentId":61,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1340380,"timestamp":87530663438,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778895502910,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1223492,"timestamp":87530784343,"id":101,"parentId":55,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1350047,"timestamp":87530657830,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778895502904,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1225526,"timestamp":87530784230,"id":93,"parentId":52,"tags":{},"startTime":1778895503031,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1352713,"timestamp":87530657086,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778895502903,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1252702,"timestamp":87530784215,"id":92,"parentId":51,"tags":{},"startTime":1778895503030,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1380143,"timestamp":87530656881,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778895502903,"traceId":"133d17b228d20a64"},{"name":"is-page-static","duration":1440598,"timestamp":87530670208,"id":65,"parentId":26,"tags":{},"startTime":1778895502916,"traceId":"133d17b228d20a64"},{"name":"check-page","duration":1462092,"timestamp":87530648821,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778895502895,"traceId":"133d17b228d20a64"},{"name":"static-check","duration":1469688,"timestamp":87530641288,"id":19,"parentId":1,"tags":{},"startTime":1778895502888,"traceId":"133d17b228d20a64"},{"name":"write-routes-manifest","duration":555,"timestamp":87532133439,"id":104,"parentId":1,"tags":{},"startTime":1778895504380,"traceId":"133d17b228d20a64"},{"name":"load-dotenv","duration":67,"timestamp":87532151832,"id":107,"parentId":106,"tags":{},"startTime":1778895504398,"traceId":"133d17b228d20a64"},{"name":"run-export-path-map","duration":763,"timestamp":87532157138,"id":108,"parentId":106,"tags":{},"startTime":1778895504403,"traceId":"133d17b228d20a64"},{"name":"next-export","duration":909259,"timestamp":87532149906,"id":106,"parentId":1,"tags":{},"startTime":1778895504396,"traceId":"133d17b228d20a64"}]
2
- [{"name":"move-exported-app-not-found-","duration":4370,"timestamp":87533063931,"id":109,"parentId":105,"tags":{},"startTime":1778895505310,"traceId":"133d17b228d20a64"},{"name":"move-exported-app-global-error-","duration":2583,"timestamp":87533068487,"id":110,"parentId":105,"tags":{},"startTime":1778895505315,"traceId":"133d17b228d20a64"},{"name":"static-generation","duration":932863,"timestamp":87532141192,"id":105,"parentId":1,"tags":{},"startTime":1778895504387,"traceId":"133d17b228d20a64"},{"name":"write-routes-manifest","duration":391,"timestamp":87533074233,"id":111,"parentId":1,"tags":{},"startTime":1778895505321,"traceId":"133d17b228d20a64"},{"name":"print-tree-view","duration":8273,"timestamp":87533091159,"id":112,"parentId":1,"tags":{},"startTime":1778895505337,"traceId":"133d17b228d20a64"},{"name":"write-route-bundle-stats","duration":22818,"timestamp":87533099488,"id":113,"parentId":1,"tags":{},"startTime":1778895505346,"traceId":"133d17b228d20a64"},{"name":"telemetry-flush","duration":22364,"timestamp":87533122350,"id":114,"parentId":1,"tags":{},"startTime":1778895505369,"traceId":"133d17b228d20a64"},{"name":"next-build","duration":27089309,"timestamp":87506055460,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778895478302,"traceId":"133d17b228d20a64"}]
1
+ [{"name":"generate-buildid","duration":396,"timestamp":88383504444,"id":4,"parentId":1,"tags":{},"startTime":1778896355751,"traceId":"14ed00172e0486d1"},{"name":"load-custom-routes","duration":576,"timestamp":88383505042,"id":5,"parentId":1,"tags":{},"startTime":1778896355751,"traceId":"14ed00172e0486d1"},{"name":"create-dist-dir","duration":856,"timestamp":88383505699,"id":6,"parentId":1,"tags":{},"startTime":1778896355752,"traceId":"14ed00172e0486d1"},{"name":"clean","duration":680,"timestamp":88383507397,"id":7,"parentId":1,"tags":{},"startTime":1778896355754,"traceId":"14ed00172e0486d1"},{"name":"discover-routes","duration":14478,"timestamp":88383613326,"id":8,"parentId":1,"tags":{},"startTime":1778896355860,"traceId":"14ed00172e0486d1"},{"name":"create-root-mapping","duration":202,"timestamp":88383627894,"id":9,"parentId":1,"tags":{},"startTime":1778896355874,"traceId":"14ed00172e0486d1"},{"name":"generate-route-types","duration":45207,"timestamp":88383631922,"id":10,"parentId":1,"tags":{},"startTime":1778896355878,"traceId":"14ed00172e0486d1"},{"name":"public-dir-conflict-check","duration":149,"timestamp":88383677379,"id":11,"parentId":1,"tags":{},"startTime":1778896355924,"traceId":"14ed00172e0486d1"},{"name":"generate-routes-manifest","duration":5377,"timestamp":88383677747,"id":12,"parentId":1,"tags":{},"startTime":1778896355924,"traceId":"14ed00172e0486d1"},{"name":"run-turbopack","duration":10674572,"timestamp":88383689690,"id":14,"parentId":1,"tags":{},"startTime":1778896355936,"traceId":"14ed00172e0486d1"},{"name":"turbopack-build-events","duration":89,"timestamp":88384045660,"id":15,"parentId":1,"tags":{},"startTime":1778896356292,"traceId":"14ed00172e0486d1"},{"name":"run-typescript","duration":13471805,"timestamp":88394375920,"id":16,"parentId":1,"tags":{},"startTime":1778896366622,"traceId":"14ed00172e0486d1"},{"name":"generate-required-server-files","duration":2665,"timestamp":88407848790,"id":18,"parentId":1,"tags":{},"startTime":1778896380095,"traceId":"14ed00172e0486d1"},{"name":"check-static-error-page","duration":24767,"timestamp":88408070780,"id":20,"parentId":19,"tags":{},"startTime":1778896380317,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":628081,"timestamp":88408099109,"id":63,"parentId":22,"tags":{},"startTime":1778896380345,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":649422,"timestamp":88408077937,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778896380324,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":867994,"timestamp":88408099692,"id":67,"parentId":28,"tags":{},"startTime":1778896380346,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":884286,"timestamp":88408083524,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778896380330,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":868440,"timestamp":88408105702,"id":70,"parentId":32,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":888899,"timestamp":88408085329,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778896380332,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":967781,"timestamp":88408105782,"id":71,"parentId":33,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":988183,"timestamp":88408085493,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778896380332,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1031519,"timestamp":88408099238,"id":64,"parentId":25,"tags":{},"startTime":1778896380346,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1049063,"timestamp":88408081789,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778896380328,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1036600,"timestamp":88408105859,"id":72,"parentId":34,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1056959,"timestamp":88408085609,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778896380332,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1042292,"timestamp":88408106025,"id":74,"parentId":36,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1062177,"timestamp":88408086221,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778896380332,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1051023,"timestamp":88408106063,"id":75,"parentId":37,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1070771,"timestamp":88408086387,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1052065,"timestamp":88408106080,"id":76,"parentId":38,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1071692,"timestamp":88408086517,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1056488,"timestamp":88408106089,"id":77,"parentId":39,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1076034,"timestamp":88408086607,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1065302,"timestamp":88408106102,"id":78,"parentId":40,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1084750,"timestamp":88408086712,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1071394,"timestamp":88408105886,"id":73,"parentId":35,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1091586,"timestamp":88408085746,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778896380332,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1071412,"timestamp":88408106115,"id":79,"parentId":41,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1090771,"timestamp":88408086794,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1092916,"timestamp":88408106135,"id":81,"parentId":43,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1112143,"timestamp":88408086985,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1093225,"timestamp":88408106123,"id":80,"parentId":42,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1112501,"timestamp":88408086885,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1095931,"timestamp":88408106148,"id":82,"parentId":44,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1115034,"timestamp":88408087097,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1097654,"timestamp":88408106160,"id":83,"parentId":45,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1116682,"timestamp":88408087195,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778896380333,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1099639,"timestamp":88408106168,"id":84,"parentId":46,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1118582,"timestamp":88408087273,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778896380334,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1102275,"timestamp":88408106181,"id":85,"parentId":47,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1121093,"timestamp":88408087407,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778896380334,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1109881,"timestamp":88408106192,"id":86,"parentId":48,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1128624,"timestamp":88408087502,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778896380334,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1110091,"timestamp":88408106201,"id":87,"parentId":49,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1126657,"timestamp":88408089685,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778896380336,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1080586,"timestamp":88408147244,"id":89,"parentId":31,"tags":{},"startTime":1778896380394,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1143820,"timestamp":88408084071,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778896380330,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1097114,"timestamp":88408145730,"id":88,"parentId":24,"tags":{},"startTime":1778896380392,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1164457,"timestamp":88408078467,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778896380325,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1140966,"timestamp":88408105484,"id":69,"parentId":30,"tags":{},"startTime":1778896380352,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1162584,"timestamp":88408083935,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778896380330,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1030067,"timestamp":88408305313,"id":91,"parentId":50,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1245335,"timestamp":88408090122,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778896380336,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1040052,"timestamp":88408305256,"id":90,"parentId":23,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1267162,"timestamp":88408078228,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778896380325,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1051228,"timestamp":88408305354,"id":94,"parentId":53,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1266161,"timestamp":88408090527,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778896380337,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1068079,"timestamp":88408305343,"id":93,"parentId":52,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1283123,"timestamp":88408090377,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778896380337,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1068287,"timestamp":88408305366,"id":95,"parentId":54,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1282992,"timestamp":88408090694,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778896380337,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1091732,"timestamp":88408305380,"id":96,"parentId":56,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1305933,"timestamp":88408091269,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778896380338,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1092030,"timestamp":88408305393,"id":97,"parentId":57,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1305994,"timestamp":88408091464,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778896380338,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1103795,"timestamp":88408305329,"id":92,"parentId":51,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1318945,"timestamp":88408090265,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778896380337,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1309671,"timestamp":88408099846,"id":68,"parentId":29,"tags":{},"startTime":1778896380346,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1325936,"timestamp":88408083663,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778896380330,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1112437,"timestamp":88408305403,"id":98,"parentId":59,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1322851,"timestamp":88408095049,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778896380341,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1118965,"timestamp":88408305588,"id":102,"parentId":55,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1333755,"timestamp":88408090860,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778896380337,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1145690,"timestamp":88408305559,"id":100,"parentId":61,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1355982,"timestamp":88408095347,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778896380342,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1160928,"timestamp":88408305536,"id":99,"parentId":60,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1371334,"timestamp":88408095218,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778896380341,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1243953,"timestamp":88408305570,"id":101,"parentId":58,"tags":{},"startTime":1778896380552,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1457960,"timestamp":88408091655,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778896380338,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1481111,"timestamp":88408098665,"id":62,"parentId":21,"tags":{},"startTime":1778896380345,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1503461,"timestamp":88408076417,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778896380323,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1488879,"timestamp":88408099354,"id":65,"parentId":26,"tags":{},"startTime":1778896380346,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1505042,"timestamp":88408083268,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778896380330,"traceId":"14ed00172e0486d1"},{"name":"is-page-static","duration":1534941,"timestamp":88408099451,"id":66,"parentId":27,"tags":{},"startTime":1778896380346,"traceId":"14ed00172e0486d1"},{"name":"check-page","duration":1552701,"timestamp":88408083401,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778896380330,"traceId":"14ed00172e0486d1"},{"name":"static-check","duration":1566744,"timestamp":88408069444,"id":19,"parentId":1,"tags":{},"startTime":1778896380316,"traceId":"14ed00172e0486d1"},{"name":"write-routes-manifest","duration":480,"timestamp":88409662257,"id":104,"parentId":1,"tags":{},"startTime":1778896381909,"traceId":"14ed00172e0486d1"},{"name":"load-dotenv","duration":68,"timestamp":88409679529,"id":107,"parentId":106,"tags":{},"startTime":1778896381926,"traceId":"14ed00172e0486d1"},{"name":"run-export-path-map","duration":1140,"timestamp":88409686500,"id":108,"parentId":106,"tags":{},"startTime":1778896381933,"traceId":"14ed00172e0486d1"},{"name":"next-export","duration":850835,"timestamp":88409677364,"id":106,"parentId":1,"tags":{},"startTime":1778896381924,"traceId":"14ed00172e0486d1"}]
2
+ [{"name":"move-exported-app-not-found-","duration":4165,"timestamp":88410533443,"id":109,"parentId":105,"tags":{},"startTime":1778896382780,"traceId":"14ed00172e0486d1"},{"name":"move-exported-app-global-error-","duration":860,"timestamp":88410537743,"id":110,"parentId":105,"tags":{},"startTime":1778896382784,"traceId":"14ed00172e0486d1"},{"name":"static-generation","duration":873920,"timestamp":88409667767,"id":105,"parentId":1,"tags":{},"startTime":1778896381914,"traceId":"14ed00172e0486d1"},{"name":"write-routes-manifest","duration":567,"timestamp":88410541904,"id":111,"parentId":1,"tags":{},"startTime":1778896382788,"traceId":"14ed00172e0486d1"},{"name":"print-tree-view","duration":6852,"timestamp":88410572059,"id":112,"parentId":1,"tags":{},"startTime":1778896382818,"traceId":"14ed00172e0486d1"},{"name":"write-route-bundle-stats","duration":26574,"timestamp":88410578960,"id":113,"parentId":1,"tags":{},"startTime":1778896382825,"traceId":"14ed00172e0486d1"},{"name":"telemetry-flush","duration":123,"timestamp":88410605591,"id":114,"parentId":1,"tags":{},"startTime":1778896382852,"traceId":"14ed00172e0486d1"},{"name":"next-build","duration":27158783,"timestamp":88383446965,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778896355693,"traceId":"14ed00172e0486d1"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":10623444,"timestamp":87506266813,"id":14,"parentId":1,"tags":{},"startTime":1778895478513,"traceId":"133d17b228d20a64"},{"name":"turbopack-build-events","duration":102,"timestamp":87506642496,"id":15,"parentId":1,"tags":{},"startTime":1778895478889,"traceId":"133d17b228d20a64"},{"name":"run-typescript","duration":13418337,"timestamp":87516947767,"id":16,"parentId":1,"tags":{},"startTime":1778895489194,"traceId":"133d17b228d20a64"},{"name":"static-check","duration":1469688,"timestamp":87530641288,"id":19,"parentId":1,"tags":{},"startTime":1778895502888,"traceId":"133d17b228d20a64"},{"name":"static-generation","duration":932863,"timestamp":87532141192,"id":105,"parentId":1,"tags":{},"startTime":1778895504387,"traceId":"133d17b228d20a64"},{"name":"telemetry-flush","duration":22364,"timestamp":87533122350,"id":114,"parentId":1,"tags":{},"startTime":1778895505369,"traceId":"133d17b228d20a64"},{"name":"next-build","duration":27089309,"timestamp":87506055460,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778895478302,"traceId":"133d17b228d20a64"}]
1
+ [{"name":"run-turbopack","duration":10674572,"timestamp":88383689690,"id":14,"parentId":1,"tags":{},"startTime":1778896355936,"traceId":"14ed00172e0486d1"},{"name":"turbopack-build-events","duration":89,"timestamp":88384045660,"id":15,"parentId":1,"tags":{},"startTime":1778896356292,"traceId":"14ed00172e0486d1"},{"name":"run-typescript","duration":13471805,"timestamp":88394375920,"id":16,"parentId":1,"tags":{},"startTime":1778896366622,"traceId":"14ed00172e0486d1"},{"name":"static-check","duration":1566744,"timestamp":88408069444,"id":19,"parentId":1,"tags":{},"startTime":1778896380316,"traceId":"14ed00172e0486d1"},{"name":"static-generation","duration":873920,"timestamp":88409667767,"id":105,"parentId":1,"tags":{},"startTime":1778896381914,"traceId":"14ed00172e0486d1"},{"name":"telemetry-flush","duration":123,"timestamp":88410605591,"id":114,"parentId":1,"tags":{},"startTime":1778896382852,"traceId":"14ed00172e0486d1"},{"name":"next-build","duration":27158783,"timestamp":88383446965,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778896355693,"traceId":"14ed00172e0486d1"}]
@@ -2108,6 +2108,22 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2108
2108
  intersection. */
2109
2109
  className="hidden sm:inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono tabular-nums text-xs border anet-fade-in anet-topo-chip-focus"
2110
2110
  title={tooltip}
2111
+ /* Round 236 / Loop: smooth the empty/non-empty colour
2112
+ crossing. Pre-R236 the chip snap-flipped between
2113
+ slate-on-slate (non-empty filter intersection) and
2114
+ amber-on-amber (empty intersection — the 'your
2115
+ pinned filters cancel out' warning). bg, color,
2116
+ and borderColor (which inherits currentColor) all
2117
+ changed in one frame. R236 adds a 200ms ease-out
2118
+ transition on all three so when a filter tightens
2119
+ matches across the 0-boundary the chip eases
2120
+ through the colour shift instead of snapping. Same
2121
+ 200ms cadence the other chip-row members use
2122
+ (R201 working/online tint, R193 active-links
2123
+ tint, R202 vendor letter color-mix). One more
2124
+ surface where colour state-changes ease rather
2125
+ than snap — consistent with the topology's
2126
+ broader transitions vocabulary. */
2111
2127
  style={{
2112
2128
  background: isEmpty
2113
2129
  ? (isLight ? '#d97706' + '14' : '#fbbf24' + '1f')
@@ -2116,12 +2132,45 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2116
2132
  ? emptyColor
2117
2133
  : (isLight ? '#475569' : '#9ca3af'),
2118
2134
  borderColor: 'currentColor',
2135
+ transition: 'background-color 200ms ease-out, color 200ms ease-out, border-color 200ms ease-out',
2119
2136
  }}
2120
2137
  >
2121
2138
  <span>
2122
2139
  <span className="hidden sm:inline" data-pin-intersection-prefix>match: </span>
2123
2140
  {pinDimCount} pins<span className="opacity-70"> · {matchAliases.length}</span>
2124
- {isEmpty && <span className="ml-1" aria-hidden>⚠</span>}
2141
+ {/* Round 237 / Loop: ⚠ warning glyph picks up the
2142
+ always-mount-opacity-gate idiom. Pre-R237 the
2143
+ glyph was conditionally rendered on isEmpty,
2144
+ snap-mounting when filter intersection
2145
+ narrowed to 0 AND introducing a layout shift
2146
+ (ml-1 margin appears alongside the glyph,
2147
+ widening the chip by ~16px). The R236 color
2148
+ easing made the colour crossing smooth but
2149
+ the glyph still pop-jumped, breaking the
2150
+ polish that R236 just installed at this
2151
+ same chip.
2152
+
2153
+ Always-mount the glyph with opacity gated by
2154
+ isEmpty + the same 200ms ease-out that R236
2155
+ uses on the chip's colour transition. Now the
2156
+ whole isEmpty crossing — bg, color, border,
2157
+ AND glyph visibility — eases as one
2158
+ coordinated 200ms event. ml-1 margin is
2159
+ reserved permanently, so the chip width
2160
+ stays stable through the crossing (no
2161
+ layout-shift jank against neighbouring
2162
+ chips). data-pin-intersection-warning attr
2163
+ surfaces the visibility state for test
2164
+ introspection. 11th surface in the always-
2165
+ mount-opacity-gate family (R181 / R182 /
2166
+ R183 / R213 ×2 / R214 / R215 / R221 / R222 /
2167
+ R223 / R237). */}
2168
+ <span
2169
+ className="ml-1"
2170
+ aria-hidden
2171
+ data-pin-intersection-warning={isEmpty ? 'true' : 'false'}
2172
+ style={{ opacity: isEmpty ? 1 : 0, transition: 'opacity 200ms ease-out' }}
2173
+ >⚠</span>
2125
2174
  </span>
2126
2175
  </span>
2127
2176
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.4.6-preview.242",
3
+ "version": "0.4.6-preview.244",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,111 @@
1
+ /* Round 236 verification: pin-intersection chip gets a smooth
2
+ * colour-easing transition on the empty↔non-empty crossing.
3
+ *
4
+ * Pre-R236 the chip's bg/color/borderColor snap-flipped between
5
+ * slate (non-empty intersection) and amber (empty — the 'pinned
6
+ * filters cancel out' warning). R236 adds a 200ms ease-out
7
+ * transition so the colour shift eases through the boundary.
8
+ *
9
+ * Scenario: 4 sessions × 2 vendors × 2 statuses; pin two filter
10
+ * dims that yield an intersection > 0 first (non-empty: slate),
11
+ * then verify the chip's inline transition includes all three
12
+ * color-related properties.
13
+ *
14
+ * Probing the transition wiring is enough — the visual ease itself
15
+ * is a CSS browser detail. We just need the transition string to
16
+ * include background-color + color + border-color with 200ms.
17
+ */
18
+ import { chromium } from 'playwright';
19
+ import { readFileSync } from 'node:fs';
20
+
21
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
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
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
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, model, status) => ({
34
+ alias, status, model, runtime: 'claude-code-cli',
35
+ network_id: nid, project_dir: null,
36
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
37
+ });
38
+ // Scenario tuned so we can flip intersection 1 → 0 by swapping
39
+ // the pinned vendor: alpha is the ONLY working anthropic; gpt
40
+ // sessions are both idle. Pin working+A → alpha (non-empty).
41
+ // Then re-pin vendor to 'O' (vendor is single-value, so 'A' is
42
+ // released and 'O' takes its place) → working+O = 0 (empty).
43
+ await route.fulfill({ response: r, json: { ...b, sessions: [
44
+ mk('alpha', 'claude-opus-4', 'working'),
45
+ mk('beta', 'claude-opus-4', 'idle'),
46
+ mk('gamma', 'gpt-4', 'idle'),
47
+ mk('delta', 'gpt-4', 'idle'),
48
+ ] } });
49
+ });
50
+ await ctx.route('**/api/hub/messages*', (r2) => r2.fulfill({ json: { messages: [] } }));
51
+ await ctx.route('**/api/hub/tasks*', (r2) => r2.fulfill({ json: { tasks: [] } }));
52
+
53
+ const page = await ctx.newPage();
54
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
55
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
56
+
57
+ // Pin working + anthropic (intersection = alpha, non-empty)
58
+ await page.locator('[data-pressure-seg="working"]').first().click();
59
+ await page.locator('[data-vendor-letter="A"]').first().click();
60
+ await page.waitForSelector('[data-pin-intersection]', { timeout: 5000, state: 'attached' });
61
+ await page.waitForTimeout(300);
62
+
63
+ const nonEmpty = await page.evaluate(() => {
64
+ const chip = document.querySelector('[data-pin-intersection]');
65
+ if (!chip) return null;
66
+ return {
67
+ empty: chip.getAttribute('data-pin-intersection-empty'),
68
+ transition: chip.style.transition,
69
+ bg: chip.style.background,
70
+ color: chip.style.color,
71
+ };
72
+ });
73
+
74
+ // Re-pin vendor 'O' — pinnedVendor is single-value, so 'A' releases
75
+ // and 'O' takes its place. working ∩ openai = 0 (gpt sessions are
76
+ // all idle) → chip flips to empty=true.
77
+ await page.locator('[data-vendor-letter="O"]').first().click();
78
+ await page.waitForTimeout(300);
79
+
80
+ const empty = await page.evaluate(() => {
81
+ const chip = document.querySelector('[data-pin-intersection]');
82
+ if (!chip) return null;
83
+ return {
84
+ empty: chip.getAttribute('data-pin-intersection-empty'),
85
+ transition: chip.style.transition,
86
+ bg: chip.style.background,
87
+ color: chip.style.color,
88
+ };
89
+ });
90
+ await browser.close();
91
+
92
+ const hasTransition = (s, prop) => new RegExp(`${prop.replace('-', '-')}\\s+200ms`).test(s || '');
93
+
94
+ const results = {
95
+ nonempty_mounted: nonEmpty !== null,
96
+ nonempty_empty_attr: nonEmpty?.empty === 'false',
97
+ nonempty_has_bg_transition: hasTransition(nonEmpty?.transition, 'background-color'),
98
+ nonempty_has_color_transition: hasTransition(nonEmpty?.transition, 'color'),
99
+ nonempty_has_border_transition: hasTransition(nonEmpty?.transition, 'border-color'),
100
+ empty_mounted: empty !== null,
101
+ empty_empty_attr: empty?.empty === 'true',
102
+ empty_has_bg_transition: hasTransition(empty?.transition, 'background-color'),
103
+ empty_has_color_transition: hasTransition(empty?.transition, 'color'),
104
+ empty_has_border_transition: hasTransition(empty?.transition, 'border-color'),
105
+ color_changed_on_flip: nonEmpty?.color !== empty?.color,
106
+ };
107
+ const ok = Object.values(results).every(Boolean);
108
+ console.log(`${ok ? '✅' : '❌'} pin-intersection color ease:`, JSON.stringify(results),
109
+ '\n nonEmpty:', nonEmpty,
110
+ '\n empty: ', empty);
111
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,107 @@
1
+ /* Round 237 verification: pin-intersection chip's ⚠ warning glyph
2
+ * always-mounts with opacity gated on isEmpty, instead of
3
+ * conditional render on isEmpty. Closes the snap-mount + layout-
4
+ * shift jank that survived R236's color easing.
5
+ *
6
+ * Test scope:
7
+ * - non-empty state: glyph in DOM, data-pin-intersection-warning
8
+ * ='false', opacity=0, transition includes 'opacity 200ms'
9
+ * - empty state: glyph in DOM, data-pin-intersection-warning
10
+ * ='true', opacity=1, transition still present
11
+ * - chip width: stable across the crossing (no layout-shift)
12
+ *
13
+ * Reuses the R236 scenario tuning — alpha is the only working
14
+ * anthropic, gpt sessions all idle; pin working+A (non-empty)
15
+ * then re-pin vendor to O (empty).
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 browser = await chromium.launch({ headless: true });
22
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
23
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
24
+ await ctx.addInitScript(() => {
25
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
26
+ });
27
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
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, model, status) => ({
33
+ alias, status, model, 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: [
38
+ mk('alpha', 'claude-opus-4', 'working'),
39
+ mk('beta', 'claude-opus-4', 'idle'),
40
+ mk('gamma', 'gpt-4', 'idle'),
41
+ mk('delta', 'gpt-4', 'idle'),
42
+ ] } });
43
+ });
44
+ await ctx.route('**/api/hub/messages*', (r2) => r2.fulfill({ json: { messages: [] } }));
45
+ await ctx.route('**/api/hub/tasks*', (r2) => r2.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.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
50
+
51
+ await page.locator('[data-pressure-seg="working"]').first().click();
52
+ await page.locator('[data-vendor-letter="A"]').first().click();
53
+ await page.waitForSelector('[data-pin-intersection-warning]', { timeout: 5000, state: 'attached' });
54
+ await page.waitForTimeout(300);
55
+
56
+ const probe = (page) => page.evaluate(() => {
57
+ const glyph = document.querySelector('[data-pin-intersection-warning]');
58
+ const chip = document.querySelector('[data-pin-intersection]');
59
+ if (!glyph || !chip) return null;
60
+ return {
61
+ present: true,
62
+ warning: glyph.getAttribute('data-pin-intersection-warning'),
63
+ opacity: parseFloat(glyph.style.opacity || '1'),
64
+ transition: glyph.style.transition,
65
+ text: glyph.textContent,
66
+ chipWidthPx: Math.round(chip.getBoundingClientRect().width * 100) / 100,
67
+ chipEmpty: chip.getAttribute('data-pin-intersection-empty'),
68
+ };
69
+ });
70
+
71
+ const nonEmpty = await probe(page);
72
+
73
+ // Flip vendor pin to 'O' — working ∩ openai = 0 (gpt all idle) → empty
74
+ await page.locator('[data-vendor-letter="O"]').first().click();
75
+ await page.waitForTimeout(300);
76
+ const empty = await probe(page);
77
+
78
+ await browser.close();
79
+
80
+ const widthDelta = nonEmpty && empty
81
+ ? Math.abs(nonEmpty.chipWidthPx - empty.chipWidthPx)
82
+ : Infinity;
83
+
84
+ const results = {
85
+ nonempty_in_dom: nonEmpty?.present === true,
86
+ nonempty_warning_false: nonEmpty?.warning === 'false',
87
+ nonempty_opacity_0: nonEmpty?.opacity === 0,
88
+ nonempty_has_transition: /opacity\s+200ms/.test(nonEmpty?.transition || ''),
89
+ nonempty_text_is_warning: nonEmpty?.text === '⚠',
90
+ nonempty_chip_empty_false: nonEmpty?.chipEmpty === 'false',
91
+
92
+ empty_in_dom: empty?.present === true,
93
+ empty_warning_true: empty?.warning === 'true',
94
+ empty_opacity_1: empty?.opacity === 1,
95
+ empty_has_transition: /opacity\s+200ms/.test(empty?.transition || ''),
96
+ empty_chip_empty_true: empty?.chipEmpty === 'true',
97
+
98
+ // Chip width stable across the crossing (no layout-shift jank).
99
+ // 1px tolerance for fractional rounding only.
100
+ chip_width_stable: widthDelta <= 1,
101
+ };
102
+ const ok = Object.values(results).every(Boolean);
103
+ console.log(`${ok ? '✅' : '❌'} pin-intersection warning crossfade:`, JSON.stringify(results),
104
+ '\n nonEmpty:', nonEmpty,
105
+ '\n empty: ', empty,
106
+ '\n widthDelta:', widthDelta);
107
+ process.exit(ok ? 0 : 1);