@sleep2agi/agent-network-dashboard 0.4.6-preview.241 → 0.4.6-preview.243

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/{0~xtfu.pii43f.js → 081n9ddv6dtxd.js} +1 -1
  133. package/.next/static/chunks/{0q_r1c.28sp9o.js → 0q.8kfj4x.v.r.js} +1 -1
  134. package/.next/static/chunks/{024piwrreh8f2.js → 0xc7xilzarj1l.js} +1 -1
  135. package/.next/trace +2 -2
  136. package/.next/trace-build +1 -1
  137. package/app/components/TopoGraph.tsx +32 -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-tabular-test.mjs +96 -0
  141. /package/.next/static/{f3jrAQcha7Ds5s5805MtC → Lak89Yx_yYYmp3PZkH4rQ}/_buildManifest.js +0 -0
  142. /package/.next/static/{f3jrAQcha7Ds5s5805MtC → Lak89Yx_yYYmp3PZkH4rQ}/_clientMiddlewareManifest.js +0 -0
  143. /package/.next/static/{f3jrAQcha7Ds5s5805MtC → Lak89Yx_yYYmp3PZkH4rQ}/_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.241"],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.243"],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.241"],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.243"],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":280,"timestamp":87198333695,"id":4,"parentId":1,"tags":{},"startTime":1778895170580,"traceId":"663214f164c3f4d7"},{"name":"load-custom-routes","duration":637,"timestamp":87198334191,"id":5,"parentId":1,"tags":{},"startTime":1778895170580,"traceId":"663214f164c3f4d7"},{"name":"create-dist-dir","duration":814,"timestamp":87198334873,"id":6,"parentId":1,"tags":{},"startTime":1778895170581,"traceId":"663214f164c3f4d7"},{"name":"clean","duration":629,"timestamp":87198336695,"id":7,"parentId":1,"tags":{},"startTime":1778895170583,"traceId":"663214f164c3f4d7"},{"name":"discover-routes","duration":31673,"timestamp":87198462292,"id":8,"parentId":1,"tags":{},"startTime":1778895170709,"traceId":"663214f164c3f4d7"},{"name":"create-root-mapping","duration":198,"timestamp":87198494087,"id":9,"parentId":1,"tags":{},"startTime":1778895170740,"traceId":"663214f164c3f4d7"},{"name":"generate-route-types","duration":34654,"timestamp":87198498190,"id":10,"parentId":1,"tags":{},"startTime":1778895170744,"traceId":"663214f164c3f4d7"},{"name":"public-dir-conflict-check","duration":141,"timestamp":87198533148,"id":11,"parentId":1,"tags":{},"startTime":1778895170779,"traceId":"663214f164c3f4d7"},{"name":"generate-routes-manifest","duration":7572,"timestamp":87198533484,"id":12,"parentId":1,"tags":{},"startTime":1778895170780,"traceId":"663214f164c3f4d7"},{"name":"run-turbopack","duration":11285314,"timestamp":87198558526,"id":14,"parentId":1,"tags":{},"startTime":1778895170805,"traceId":"663214f164c3f4d7"},{"name":"turbopack-build-events","duration":110,"timestamp":87198985660,"id":15,"parentId":1,"tags":{},"startTime":1778895171232,"traceId":"663214f164c3f4d7"},{"name":"run-typescript","duration":13651873,"timestamp":87209857016,"id":16,"parentId":1,"tags":{},"startTime":1778895182103,"traceId":"663214f164c3f4d7"},{"name":"generate-required-server-files","duration":3206,"timestamp":87223510314,"id":18,"parentId":1,"tags":{},"startTime":1778895195757,"traceId":"663214f164c3f4d7"},{"name":"check-static-error-page","duration":23702,"timestamp":87223739606,"id":20,"parentId":19,"tags":{},"startTime":1778895195986,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":810524,"timestamp":87223773629,"id":63,"parentId":22,"tags":{},"startTime":1778895196020,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":840973,"timestamp":87223743354,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778895195990,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":955403,"timestamp":87223774588,"id":68,"parentId":29,"tags":{},"startTime":1778895196021,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":981792,"timestamp":87223748332,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778895195995,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":977297,"timestamp":87223774752,"id":69,"parentId":30,"tags":{},"startTime":1778895196021,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1003601,"timestamp":87223748529,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778895195995,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":980350,"timestamp":87223774982,"id":70,"parentId":32,"tags":{},"startTime":1778895196021,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1006325,"timestamp":87223749069,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778895195995,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":993290,"timestamp":87223775090,"id":71,"parentId":33,"tags":{},"startTime":1778895196021,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1019215,"timestamp":87223749235,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778895195996,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1024324,"timestamp":87223775185,"id":72,"parentId":34,"tags":{},"startTime":1778895196021,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1050197,"timestamp":87223749397,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778895195996,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1049141,"timestamp":87223775346,"id":74,"parentId":36,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1073430,"timestamp":87223751137,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778895195997,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1077752,"timestamp":87223775389,"id":75,"parentId":37,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1101860,"timestamp":87223751360,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778895195998,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1086908,"timestamp":87223775218,"id":73,"parentId":35,"tags":{},"startTime":1778895196021,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1112646,"timestamp":87223749565,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778895195996,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1122920,"timestamp":87223775408,"id":76,"parentId":38,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1146876,"timestamp":87223751529,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778895195998,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1128640,"timestamp":87223775439,"id":78,"parentId":40,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1152355,"timestamp":87223751794,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778895195998,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1143446,"timestamp":87223775454,"id":79,"parentId":41,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1167066,"timestamp":87223751930,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778895195998,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1147094,"timestamp":87223775466,"id":80,"parentId":42,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1168892,"timestamp":87223753750,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778895196000,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1158944,"timestamp":87223775482,"id":81,"parentId":43,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1180523,"timestamp":87223753978,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778895196000,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1166762,"timestamp":87223775497,"id":82,"parentId":44,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1188180,"timestamp":87223754151,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778895196000,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1179374,"timestamp":87223775424,"id":77,"parentId":39,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1203204,"timestamp":87223751662,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778895195998,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1179696,"timestamp":87223775508,"id":83,"parentId":45,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1204428,"timestamp":87223754283,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778895196001,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1203874,"timestamp":87223775524,"id":84,"parentId":46,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1225079,"timestamp":87223754397,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778895196001,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1205592,"timestamp":87223775540,"id":85,"parentId":47,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1226659,"timestamp":87223754532,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778895196001,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1251367,"timestamp":87223775570,"id":87,"parentId":49,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1272298,"timestamp":87223754769,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778895196001,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1253010,"timestamp":87223775558,"id":86,"parentId":48,"tags":{},"startTime":1778895196022,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1273978,"timestamp":87223754651,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778895196001,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1255929,"timestamp":87223772933,"id":62,"parentId":21,"tags":{},"startTime":1778895196019,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1287563,"timestamp":87223741332,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778895195988,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1263072,"timestamp":87223774403,"id":67,"parentId":28,"tags":{},"startTime":1778895196021,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1289429,"timestamp":87223748165,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778895195994,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1291111,"timestamp":87223795536,"id":89,"parentId":31,"tags":{},"startTime":1778895196042,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1338036,"timestamp":87223748695,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778895195995,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1293681,"timestamp":87223793217,"id":88,"parentId":24,"tags":{},"startTime":1778895196039,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1342967,"timestamp":87223743976,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778895195990,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1346842,"timestamp":87223773794,"id":64,"parentId":25,"tags":{},"startTime":1778895196020,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1373840,"timestamp":87223746878,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778895195993,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1315200,"timestamp":87223810102,"id":90,"parentId":23,"tags":{},"startTime":1778895196056,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1381861,"timestamp":87223743676,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778895195990,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1389239,"timestamp":87223810207,"id":95,"parentId":54,"tags":{},"startTime":1778895196056,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1443425,"timestamp":87223756114,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778895196002,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1391364,"timestamp":87223810180,"id":93,"parentId":52,"tags":{},"startTime":1778895196056,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1445993,"timestamp":87223755611,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778895196002,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1445364,"timestamp":87223773957,"id":65,"parentId":26,"tags":{},"startTime":1778895196020,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1471599,"timestamp":87223747795,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778895195994,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1429080,"timestamp":87223810240,"id":97,"parentId":57,"tags":{},"startTime":1778895196057,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1477518,"timestamp":87223761879,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778895196008,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1429346,"timestamp":87223810223,"id":96,"parentId":56,"tags":{},"startTime":1778895196056,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1482522,"timestamp":87223757079,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778895196003,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1429533,"timestamp":87223810191,"id":94,"parentId":53,"tags":{},"startTime":1778895196056,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1483929,"timestamp":87223755848,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778895196002,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1395494,"timestamp":87223852295,"id":101,"parentId":58,"tags":{},"startTime":1778895196099,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1485661,"timestamp":87223762182,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778895196008,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1488942,"timestamp":87223774116,"id":66,"parentId":27,"tags":{},"startTime":1778895196020,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1515149,"timestamp":87223747981,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778895195994,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1452942,"timestamp":87223810295,"id":100,"parentId":61,"tags":{},"startTime":1778895196057,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1500249,"timestamp":87223763019,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778895196009,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1389514,"timestamp":87223877440,"id":102,"parentId":55,"tags":{},"startTime":1778895196124,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1510639,"timestamp":87223756389,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778895196003,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1470343,"timestamp":87223810273,"id":99,"parentId":60,"tags":{},"startTime":1778895196057,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1517866,"timestamp":87223762821,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778895196009,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1478823,"timestamp":87223810164,"id":92,"parentId":51,"tags":{},"startTime":1778895196056,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1533641,"timestamp":87223755415,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778895196002,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1481036,"timestamp":87223810146,"id":91,"parentId":50,"tags":{},"startTime":1778895196056,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1536024,"timestamp":87223755215,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778895196001,"traceId":"663214f164c3f4d7"},{"name":"is-page-static","duration":1559254,"timestamp":87223810252,"id":98,"parentId":59,"tags":{},"startTime":1778895196057,"traceId":"663214f164c3f4d7"},{"name":"check-page","duration":1606951,"timestamp":87223762654,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778895196009,"traceId":"663214f164c3f4d7"},{"name":"static-check","duration":1631219,"timestamp":87223738454,"id":19,"parentId":1,"tags":{},"startTime":1778895195985,"traceId":"663214f164c3f4d7"},{"name":"write-routes-manifest","duration":561,"timestamp":87225383124,"id":104,"parentId":1,"tags":{},"startTime":1778895197629,"traceId":"663214f164c3f4d7"},{"name":"load-dotenv","duration":67,"timestamp":87225400338,"id":107,"parentId":106,"tags":{},"startTime":1778895197647,"traceId":"663214f164c3f4d7"},{"name":"run-export-path-map","duration":878,"timestamp":87225404410,"id":108,"parentId":106,"tags":{},"startTime":1778895197651,"traceId":"663214f164c3f4d7"},{"name":"next-export","duration":1005067,"timestamp":87225398454,"id":106,"parentId":1,"tags":{},"startTime":1778895197645,"traceId":"663214f164c3f4d7"}]
2
- [{"name":"move-exported-app-not-found-","duration":3423,"timestamp":87226408542,"id":109,"parentId":105,"tags":{},"startTime":1778895198655,"traceId":"663214f164c3f4d7"},{"name":"move-exported-app-global-error-","duration":2252,"timestamp":87226412093,"id":110,"parentId":105,"tags":{},"startTime":1778895198658,"traceId":"663214f164c3f4d7"},{"name":"static-generation","duration":1027382,"timestamp":87225388959,"id":105,"parentId":1,"tags":{},"startTime":1778895197635,"traceId":"663214f164c3f4d7"},{"name":"write-routes-manifest","duration":482,"timestamp":87226416542,"id":111,"parentId":1,"tags":{},"startTime":1778895198663,"traceId":"663214f164c3f4d7"},{"name":"print-tree-view","duration":7335,"timestamp":87226454035,"id":112,"parentId":1,"tags":{},"startTime":1778895198700,"traceId":"663214f164c3f4d7"},{"name":"write-route-bundle-stats","duration":26935,"timestamp":87226461411,"id":113,"parentId":1,"tags":{},"startTime":1778895198708,"traceId":"663214f164c3f4d7"},{"name":"telemetry-flush","duration":10420,"timestamp":87226488404,"id":114,"parentId":1,"tags":{},"startTime":1778895198735,"traceId":"663214f164c3f4d7"},{"name":"next-build","duration":28236152,"timestamp":87198262719,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778895170509,"traceId":"663214f164c3f4d7"}]
1
+ [{"name":"generate-buildid","duration":475,"timestamp":87994712218,"id":4,"parentId":1,"tags":{},"startTime":1778895966959,"traceId":"dafbe8921f55b51b"},{"name":"load-custom-routes","duration":695,"timestamp":87994712908,"id":5,"parentId":1,"tags":{},"startTime":1778895966959,"traceId":"dafbe8921f55b51b"},{"name":"create-dist-dir","duration":1136,"timestamp":87994713671,"id":6,"parentId":1,"tags":{},"startTime":1778895966960,"traceId":"dafbe8921f55b51b"},{"name":"clean","duration":675,"timestamp":87994715655,"id":7,"parentId":1,"tags":{},"startTime":1778895966962,"traceId":"dafbe8921f55b51b"},{"name":"discover-routes","duration":31479,"timestamp":87994845920,"id":8,"parentId":1,"tags":{},"startTime":1778895967092,"traceId":"dafbe8921f55b51b"},{"name":"create-root-mapping","duration":180,"timestamp":87994877481,"id":9,"parentId":1,"tags":{},"startTime":1778895967124,"traceId":"dafbe8921f55b51b"},{"name":"generate-route-types","duration":32869,"timestamp":87994880561,"id":10,"parentId":1,"tags":{},"startTime":1778895967127,"traceId":"dafbe8921f55b51b"},{"name":"public-dir-conflict-check","duration":142,"timestamp":87994913662,"id":11,"parentId":1,"tags":{},"startTime":1778895967160,"traceId":"dafbe8921f55b51b"},{"name":"generate-routes-manifest","duration":6980,"timestamp":87994913991,"id":12,"parentId":1,"tags":{},"startTime":1778895967160,"traceId":"dafbe8921f55b51b"},{"name":"run-turbopack","duration":11532654,"timestamp":87994941087,"id":14,"parentId":1,"tags":{},"startTime":1778895967187,"traceId":"dafbe8921f55b51b"},{"name":"turbopack-build-events","duration":111,"timestamp":87995323289,"id":15,"parentId":1,"tags":{},"startTime":1778895967570,"traceId":"dafbe8921f55b51b"},{"name":"run-typescript","duration":14086399,"timestamp":88006483791,"id":16,"parentId":1,"tags":{},"startTime":1778895978730,"traceId":"dafbe8921f55b51b"},{"name":"generate-required-server-files","duration":2447,"timestamp":88020571294,"id":18,"parentId":1,"tags":{},"startTime":1778895992818,"traceId":"dafbe8921f55b51b"},{"name":"check-static-error-page","duration":17151,"timestamp":88020821634,"id":20,"parentId":19,"tags":{},"startTime":1778895993068,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":824138,"timestamp":88020846582,"id":63,"parentId":22,"tags":{},"startTime":1778895993093,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":845961,"timestamp":88020824934,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778895993071,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":865670,"timestamp":88020846721,"id":64,"parentId":25,"tags":{},"startTime":1778895993093,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":884090,"timestamp":88020828398,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778895993075,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":904067,"timestamp":88020850298,"id":70,"parentId":32,"tags":{},"startTime":1778895993097,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":924599,"timestamp":88020829853,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778895993076,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":929925,"timestamp":88020850375,"id":71,"parentId":33,"tags":{},"startTime":1778895993097,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":950351,"timestamp":88020830033,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778895993076,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":936155,"timestamp":88020853086,"id":72,"parentId":34,"tags":{},"startTime":1778895993099,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":959143,"timestamp":88020830184,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778895993076,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":940829,"timestamp":88020853131,"id":73,"parentId":35,"tags":{},"startTime":1778895993099,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":963718,"timestamp":88020830340,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778895993077,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":946592,"timestamp":88020853253,"id":74,"parentId":36,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":969024,"timestamp":88020830887,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778895993077,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":951720,"timestamp":88020849718,"id":67,"parentId":28,"tags":{},"startTime":1778895993096,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":972598,"timestamp":88020828890,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778895993075,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":953637,"timestamp":88020853283,"id":75,"parentId":37,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":975870,"timestamp":88020831105,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778895993077,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":955135,"timestamp":88020853318,"id":77,"parentId":39,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":977091,"timestamp":88020831400,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778895993078,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":959729,"timestamp":88020853331,"id":78,"parentId":40,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":981580,"timestamp":88020831522,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778895993078,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":964900,"timestamp":88020853341,"id":79,"parentId":41,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":986646,"timestamp":88020831636,"id":41,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778895993078,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":968888,"timestamp":88020853353,"id":80,"parentId":42,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":990503,"timestamp":88020831786,"id":42,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778895993078,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":972983,"timestamp":88020853366,"id":81,"parentId":43,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":994483,"timestamp":88020831910,"id":43,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778895993078,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":989268,"timestamp":88020853376,"id":82,"parentId":44,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1010593,"timestamp":88020832129,"id":44,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778895993078,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":993571,"timestamp":88020853390,"id":83,"parentId":45,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1014768,"timestamp":88020832267,"id":45,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778895993079,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":998354,"timestamp":88020853404,"id":84,"parentId":46,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1019399,"timestamp":88020832417,"id":46,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778895993079,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1003903,"timestamp":88020853417,"id":85,"parentId":47,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1024789,"timestamp":88020832579,"id":47,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778895993079,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1005010,"timestamp":88020853303,"id":76,"parentId":38,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1027092,"timestamp":88020831274,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778895993078,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1008330,"timestamp":88020853427,"id":86,"parentId":48,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1029074,"timestamp":88020832726,"id":48,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778895993079,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1004582,"timestamp":88020862061,"id":88,"parentId":24,"tags":{},"startTime":1778895993108,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1041159,"timestamp":88020825538,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778895993072,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1003425,"timestamp":88020867908,"id":89,"parentId":31,"tags":{},"startTime":1778895993114,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1041954,"timestamp":88020829421,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778895993076,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1072649,"timestamp":88020849919,"id":68,"parentId":29,"tags":{},"startTime":1778895993096,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1093560,"timestamp":88020829084,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778895993075,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1077595,"timestamp":88020850104,"id":69,"parentId":30,"tags":{},"startTime":1778895993096,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1098499,"timestamp":88020829269,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778895993076,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1076633,"timestamp":88020853440,"id":87,"parentId":49,"tags":{},"startTime":1778895993100,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1095287,"timestamp":88020834845,"id":49,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778895993081,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1062504,"timestamp":88020870118,"id":90,"parentId":23,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1107415,"timestamp":88020825266,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778895993072,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1069350,"timestamp":88020870179,"id":94,"parentId":53,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1103419,"timestamp":88020836155,"id":53,"parentId":19,"tags":{"page":"/node"},"startTime":1778895993082,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1076403,"timestamp":88020870190,"id":95,"parentId":54,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1110249,"timestamp":88020836393,"id":54,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778895993083,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1083994,"timestamp":88020870203,"id":96,"parentId":56,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1116958,"timestamp":88020837289,"id":56,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778895993084,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1093828,"timestamp":88020870211,"id":97,"parentId":57,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1126587,"timestamp":88020837511,"id":57,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778895993084,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1098101,"timestamp":88020870224,"id":98,"parentId":59,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1130182,"timestamp":88020838185,"id":59,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778895993084,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1110591,"timestamp":88020870239,"id":99,"parentId":60,"tags":{},"startTime":1778895993117,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1142555,"timestamp":88020838349,"id":60,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778895993085,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1118090,"timestamp":88020870253,"id":100,"parentId":61,"tags":{},"startTime":1778895993117,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1149906,"timestamp":88020838508,"id":61,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778895993085,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1095015,"timestamp":88020901148,"id":101,"parentId":55,"tags":{},"startTime":1778895993147,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1159543,"timestamp":88020836678,"id":55,"parentId":19,"tags":{"page":"/"},"startTime":1778895993083,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1070594,"timestamp":88020932714,"id":102,"parentId":58,"tags":{},"startTime":1778895993179,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1165640,"timestamp":88020837725,"id":58,"parentId":19,"tags":{"page":"/settings"},"startTime":1778895993084,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1165408,"timestamp":88020870171,"id":93,"parentId":52,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1199757,"timestamp":88020835888,"id":52,"parentId":19,"tags":{"page":"/messages"},"startTime":1778895993082,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1232066,"timestamp":88020849173,"id":66,"parentId":27,"tags":{},"startTime":1778895993095,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1252591,"timestamp":88020828737,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778895993075,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1258388,"timestamp":88020848955,"id":65,"parentId":26,"tags":{},"startTime":1778895993095,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1278843,"timestamp":88020828577,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778895993075,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1237356,"timestamp":88020870159,"id":92,"parentId":51,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1272005,"timestamp":88020835534,"id":51,"parentId":19,"tags":{"page":"/logs"},"startTime":1778895993082,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1268437,"timestamp":88020870145,"id":91,"parentId":50,"tags":{},"startTime":1778895993116,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1303311,"timestamp":88020835344,"id":50,"parentId":19,"tags":{"page":"/login"},"startTime":1778895993082,"traceId":"dafbe8921f55b51b"},{"name":"is-page-static","duration":1338107,"timestamp":88020845494,"id":62,"parentId":21,"tags":{},"startTime":1778895993092,"traceId":"dafbe8921f55b51b"},{"name":"check-page","duration":1360375,"timestamp":88020823316,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778895993070,"traceId":"dafbe8921f55b51b"},{"name":"static-check","duration":1363264,"timestamp":88020820474,"id":19,"parentId":1,"tags":{},"startTime":1778895993067,"traceId":"dafbe8921f55b51b"},{"name":"write-routes-manifest","duration":485,"timestamp":88022192235,"id":104,"parentId":1,"tags":{},"startTime":1778895994439,"traceId":"dafbe8921f55b51b"},{"name":"load-dotenv","duration":65,"timestamp":88022208042,"id":107,"parentId":106,"tags":{},"startTime":1778895994454,"traceId":"dafbe8921f55b51b"},{"name":"run-export-path-map","duration":941,"timestamp":88022214559,"id":108,"parentId":106,"tags":{},"startTime":1778895994461,"traceId":"dafbe8921f55b51b"},{"name":"next-export","duration":891943,"timestamp":88022206382,"id":106,"parentId":1,"tags":{},"startTime":1778895994453,"traceId":"dafbe8921f55b51b"}]
2
+ [{"name":"move-exported-app-not-found-","duration":7171,"timestamp":88023105085,"id":109,"parentId":105,"tags":{},"startTime":1778895995351,"traceId":"dafbe8921f55b51b"},{"name":"move-exported-app-global-error-","duration":1738,"timestamp":88023112450,"id":110,"parentId":105,"tags":{},"startTime":1778895995359,"traceId":"dafbe8921f55b51b"},{"name":"static-generation","duration":919727,"timestamp":88022197293,"id":105,"parentId":1,"tags":{},"startTime":1778895994444,"traceId":"dafbe8921f55b51b"},{"name":"write-routes-manifest","duration":505,"timestamp":88023117226,"id":111,"parentId":1,"tags":{},"startTime":1778895995364,"traceId":"dafbe8921f55b51b"},{"name":"print-tree-view","duration":5518,"timestamp":88023126228,"id":112,"parentId":1,"tags":{},"startTime":1778895995373,"traceId":"dafbe8921f55b51b"},{"name":"write-route-bundle-stats","duration":26200,"timestamp":88023131781,"id":113,"parentId":1,"tags":{},"startTime":1778895995378,"traceId":"dafbe8921f55b51b"},{"name":"telemetry-flush","duration":43788,"timestamp":88023158041,"id":114,"parentId":1,"tags":{},"startTime":1778895995404,"traceId":"dafbe8921f55b51b"},{"name":"next-build","duration":28581322,"timestamp":87994620557,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778895966867,"traceId":"dafbe8921f55b51b"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":11285314,"timestamp":87198558526,"id":14,"parentId":1,"tags":{},"startTime":1778895170805,"traceId":"663214f164c3f4d7"},{"name":"turbopack-build-events","duration":110,"timestamp":87198985660,"id":15,"parentId":1,"tags":{},"startTime":1778895171232,"traceId":"663214f164c3f4d7"},{"name":"run-typescript","duration":13651873,"timestamp":87209857016,"id":16,"parentId":1,"tags":{},"startTime":1778895182103,"traceId":"663214f164c3f4d7"},{"name":"static-check","duration":1631219,"timestamp":87223738454,"id":19,"parentId":1,"tags":{},"startTime":1778895195985,"traceId":"663214f164c3f4d7"},{"name":"static-generation","duration":1027382,"timestamp":87225388959,"id":105,"parentId":1,"tags":{},"startTime":1778895197635,"traceId":"663214f164c3f4d7"},{"name":"telemetry-flush","duration":10420,"timestamp":87226488404,"id":114,"parentId":1,"tags":{},"startTime":1778895198735,"traceId":"663214f164c3f4d7"},{"name":"next-build","duration":28236152,"timestamp":87198262719,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778895170509,"traceId":"663214f164c3f4d7"}]
1
+ [{"name":"run-turbopack","duration":11532654,"timestamp":87994941087,"id":14,"parentId":1,"tags":{},"startTime":1778895967187,"traceId":"dafbe8921f55b51b"},{"name":"turbopack-build-events","duration":111,"timestamp":87995323289,"id":15,"parentId":1,"tags":{},"startTime":1778895967570,"traceId":"dafbe8921f55b51b"},{"name":"run-typescript","duration":14086399,"timestamp":88006483791,"id":16,"parentId":1,"tags":{},"startTime":1778895978730,"traceId":"dafbe8921f55b51b"},{"name":"static-check","duration":1363264,"timestamp":88020820474,"id":19,"parentId":1,"tags":{},"startTime":1778895993067,"traceId":"dafbe8921f55b51b"},{"name":"static-generation","duration":919727,"timestamp":88022197293,"id":105,"parentId":1,"tags":{},"startTime":1778895994444,"traceId":"dafbe8921f55b51b"},{"name":"telemetry-flush","duration":43788,"timestamp":88023158041,"id":114,"parentId":1,"tags":{},"startTime":1778895995404,"traceId":"dafbe8921f55b51b"},{"name":"next-build","duration":28581322,"timestamp":87994620557,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778895966867,"traceId":"dafbe8921f55b51b"}]
@@ -2092,8 +2092,38 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2092
2092
  data-pin-intersection-count={matchAliases.length}
2093
2093
  data-pin-intersection-empty={isEmpty ? 'true' : 'false'}
2094
2094
  data-pin-intersection-aliases={matchAliases.join(',')}
2095
- className="hidden sm:inline-flex items-center gap-1.5 px-2.5 py-1 rounded-md font-mono text-xs border anet-fade-in anet-topo-chip-focus"
2095
+ /* Round 235 / Loop: pin-intersection chip joins the
2096
+ info-density tabular-nums sweep. The chip has TWO
2097
+ digits visible at once — '{pinDimCount} pins ·
2098
+ {matchAliases.length}' — and the matchAliases count
2099
+ in particular rolls frequently as filters tighten /
2100
+ widen against the live fleet. font-mono already
2101
+ makes the digits uniform-ish, but tabular-nums
2102
+ further locks digit width within the mono cell so
2103
+ the gap between 'pins' and '·' stays stable, and
2104
+ the chip's overall width doesn't bump when either
2105
+ number changes. 9th surface in the sweep — the
2106
+ third and last HTML chip surface, completing
2107
+ coverage across chip-row + vendor-row + pin-
2108
+ intersection. */
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"
2096
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. */
2097
2127
  style={{
2098
2128
  background: isEmpty
2099
2129
  ? (isLight ? '#d97706' + '14' : '#fbbf24' + '1f')
@@ -2102,6 +2132,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
2102
2132
  ? emptyColor
2103
2133
  : (isLight ? '#475569' : '#9ca3af'),
2104
2134
  borderColor: 'currentColor',
2135
+ transition: 'background-color 200ms ease-out, color 200ms ease-out, border-color 200ms ease-out',
2105
2136
  }}
2106
2137
  >
2107
2138
  <span>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.4.6-preview.241",
3
+ "version": "0.4.6-preview.243",
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,96 @@
1
+ /* Round 235 verification: pin-intersection chip (the
2
+ * '{pinDimCount} pins · {matchAliases.length}' chip that surfaces
3
+ * when multiple filter dimensions are pinned simultaneously) picks
4
+ * up the Tailwind `tabular-nums` utility so its two visible
5
+ * digits don't reflow the chip on counter changes.
6
+ *
7
+ * 9th surface in the info-density tabular-nums sweep — the third
8
+ * HTML chip surface, completing chip-row + vendor-row + pin-
9
+ * intersection chip coverage.
10
+ *
11
+ * Scenario: needs >= 2 pinned filter dimensions to trigger the
12
+ * chip render. Simplest path: 4 sessions split across two
13
+ * vendors (anthropic + openai) and two statuses (working +
14
+ * idle). Then in the page we set pinnedStatus + pinnedVendor
15
+ * via localStorage so two filter dims pin simultaneously
16
+ * without needing to click the chips.
17
+ *
18
+ * The TopoGraph reads pinnedStatus + pinnedVendor from session-
19
+ * Storage keys (R88 / R60 persistence — let me trust that's
20
+ * how the state hydrates from storage at mount). If not, fall
21
+ * back to programmatic click on the working chip + vendor letter.
22
+ */
23
+ import { chromium } from 'playwright';
24
+ import { readFileSync } from 'node:fs';
25
+
26
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
27
+ const browser = await chromium.launch({ headless: true });
28
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
29
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
30
+ await ctx.addInitScript(() => {
31
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
32
+ });
33
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
34
+ await ctx.route('**/api/hub/status*', async (route) => {
35
+ const r = await route.fetch();
36
+ const b = await r.json();
37
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
38
+ const mk = (alias, model, status) => ({
39
+ alias, status, model, runtime: 'claude-code-cli',
40
+ network_id: nid, project_dir: null,
41
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
42
+ });
43
+ // 2 vendors × 2 statuses so multiple filter dims have something
44
+ // to bite on (chip strip renders, pressure-bar segments populate).
45
+ await route.fulfill({ response: r, json: { ...b, sessions: [
46
+ mk('alpha', 'claude-opus-4', 'working'),
47
+ mk('beta', 'claude-opus-4', 'idle'),
48
+ mk('gamma', 'gpt-4', 'working'),
49
+ mk('delta', 'gpt-4', 'idle'),
50
+ ] } });
51
+ });
52
+ await ctx.route('**/api/hub/messages*', (r2) => r2.fulfill({ json: { messages: [] } }));
53
+ await ctx.route('**/api/hub/tasks*', (r2) => r2.fulfill({ json: { tasks: [] } }));
54
+
55
+ const page = await ctx.newPage();
56
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
57
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
58
+ await page.waitForSelector('[data-vendor-letter]', { timeout: 10000, state: 'attached' });
59
+
60
+ // Pin two filter dimensions: click the working pressure-bar segment
61
+ // + click the anthropic vendor letter. Both should fire setPinned*
62
+ // state which surfaces the pin-intersection chip.
63
+ await page.locator('[data-pressure-seg="working"]').first().click();
64
+ await page.locator('[data-vendor-letter="A"]').first().click();
65
+ await page.waitForSelector('[data-pin-intersection]', { timeout: 5000, state: 'attached' });
66
+ await page.waitForTimeout(300);
67
+
68
+ const out = await page.evaluate(() => {
69
+ const chip = document.querySelector('[data-pin-intersection]');
70
+ if (!chip) return null;
71
+ return {
72
+ pinDim: chip.getAttribute('data-pin-dim-count'),
73
+ matchCount: chip.getAttribute('data-pin-intersection-count'),
74
+ empty: chip.getAttribute('data-pin-intersection-empty'),
75
+ classListHas: chip.className.split(/\s+/).includes('tabular-nums'),
76
+ fontVarNumeric: getComputedStyle(chip).fontVariantNumeric,
77
+ text: (chip.textContent || '').trim(),
78
+ };
79
+ });
80
+ await browser.close();
81
+
82
+ const hasTab = (s) => /tabular-nums/.test(s || '');
83
+
84
+ const results = {
85
+ chip_mounted: out !== null,
86
+ pin_dim_2: out?.pinDim === '2',
87
+ match_present: typeof out?.matchCount === 'string' && /^\d+$/.test(out.matchCount),
88
+ empty_attr_present: out?.empty === 'true' || out?.empty === 'false',
89
+ class_utility_present: out?.classListHas === true,
90
+ fvn_tabular_nums: hasTab(out?.fontVarNumeric),
91
+ text_has_pins_dot: /\d+\s*pins?\s*·\s*\d+/.test(out?.text || ''),
92
+ };
93
+ const ok = Object.values(results).every(Boolean);
94
+ console.log(`${ok ? '✅' : '❌'} pin-intersection tabular:`, JSON.stringify(results),
95
+ '\n chip:', out);
96
+ process.exit(ok ? 0 : 1);