@sleep2agi/agent-network-dashboard 0.5.1-preview.6 → 0.5.1-preview.8

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 (140) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +1 -1
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/admin.html +1 -1
  21. package/.next/server/app/admin.rsc +1 -1
  22. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  23. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  28. package/.next/server/app/index.html +2 -2
  29. package/.next/server/app/index.rsc +2 -2
  30. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/login.html +2 -2
  37. package/.next/server/app/login.rsc +2 -2
  38. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  39. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  40. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  44. package/.next/server/app/logs.html +1 -1
  45. package/.next/server/app/logs.rsc +1 -1
  46. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  52. package/.next/server/app/messages.html +1 -1
  53. package/.next/server/app/messages.rsc +1 -1
  54. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  60. package/.next/server/app/node.html +1 -1
  61. package/.next/server/app/node.rsc +1 -1
  62. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  63. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  68. package/.next/server/app/nodes.html +1 -1
  69. package/.next/server/app/nodes.rsc +1 -1
  70. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  76. package/.next/server/app/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/server-logs.html +1 -1
  78. package/.next/server/app/server-logs.rsc +1 -1
  79. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  85. package/.next/server/app/settings/networks.html +1 -1
  86. package/.next/server/app/settings/networks.rsc +1 -1
  87. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  94. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/settings/tokens.html +1 -1
  96. package/.next/server/app/settings/tokens.rsc +1 -1
  97. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  104. package/.next/server/app/settings.html +2 -2
  105. package/.next/server/app/settings.rsc +2 -2
  106. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  111. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  112. package/.next/server/app/tasks.html +1 -1
  113. package/.next/server/app/tasks.rsc +1 -1
  114. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  120. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  121. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  126. package/.next/server/middleware-build-manifest.js +3 -3
  127. package/.next/server/pages/404.html +1 -1
  128. package/.next/server/pages/500.html +1 -1
  129. package/.next/static/chunks/{044h71iacvq0y.js → 06132.qvlxn22.js} +3 -3
  130. package/.next/static/chunks/{0wtq_6dnzems6.js → 0vkj-grzc4zxy.js} +1 -1
  131. package/.next/static/chunks/{0bja1amnrg3li.js → 0x0kput204icg.js} +1 -1
  132. package/.next/trace +2 -2
  133. package/.next/trace-build +1 -1
  134. package/app/components/TopoGraph.tsx +44 -4
  135. package/package.json +1 -1
  136. package/scripts/topo-minimap-viewport-hover-test.mjs +109 -0
  137. package/scripts/topo-zoom-level-hover-letterspacing-test.mjs +91 -0
  138. /package/.next/static/{jOeqBTgEh3N9Etidr5ZzD → m-5OV2JFjgsIdYk1S2Lvx}/_buildManifest.js +0 -0
  139. /package/.next/static/{jOeqBTgEh3N9Etidr5ZzD → m-5OV2JFjgsIdYk1S2Lvx}/_clientMiddlewareManifest.js +0 -0
  140. /package/.next/static/{jOeqBTgEh3N9Etidr5ZzD → m-5OV2JFjgsIdYk1S2Lvx}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.6"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59276,e=>{"use strict";var s=e.i(12629),a=e.i(11449);let t=async e=>{let s=await fetch(e);if(401===s.status)throw window.location.assign("/login"),Error("unauthorized");return s.json()},r={refreshInterval:5e3,dedupingInterval:3e3};function n(e,s){if(!s)return e;let a=e.includes("?")?"&":"?";return`${e}${a}network_id=${encodeURIComponent(s)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,s.default)("/api/anet/config",t,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/health",t,r);return{health:e||null,error:a}},"useLicense",0,function(){let{data:e,error:a}=(0,s.default)("/api/hub/license",t,{refreshInterval:6e4});return{license:e?.ok?e:null,error:a}},"useMessages",0,function(e=100){let{networkId:l}=(0,a.useNetworkId)(),{data:i,error:c,isLoading:d}=(0,s.default)(n(`/api/hub/messages?limit=${e}`,l),t,r);return{messages:i?.messages||[],error:c,isLoading:d}},"useSessions",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i,isLoading:c}=(0,s.default)(n("/api/hub/status",e),t,r);return{sessions:l?.sessions||[],hint:l?._hint,error:i,isLoading:c}},"useStats",0,function(){let{networkId:e}=(0,a.useNetworkId)(),{data:l,error:i}=(0,s.default)(n("/api/hub/stats",e),t,r);return{stats:l?.ok?l:null,error:i}},"useTasks",0,function(e){let{networkId:l}=(0,a.useNetworkId)(),i=new URLSearchParams({limit:"100",...e}).toString(),{data:c,error:d,isLoading:o}=(0,s.default)(n(`/api/hub/tasks?${i}`,l),t,r);return{tasks:c?.tasks||[],count:c?.count??0,source:c?.source,error:d,isLoading:o}}])},70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.7"],70286)},65610,e=>{"use strict";var s=e.i(22381),a=e.i(23910),t=e.i(56839),r=e.i(59276),n=e.i(70286);e.s(["default",0,function(){let{config:e}=(0,r.useAnetConfig)(),{health:l}=(0,r.useHealth)(),{license:i}=(0,r.useLicense)(),[c,d]=(0,a.useState)(""),[o,x]=(0,a.useState)(""),[m,h]=(0,a.useState)(""),[g,u]=(0,a.useState)(""),[p,N]=(0,a.useState)(""),b="flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between",j="break-all sm:max-w-[320px] sm:text-right";return(0,s.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,s.jsx)("h1",{className:"text-2xl font-bold text-white mb-3 lg:ml-0 ml-10",children:"Settings"}),(0,s.jsx)("nav",{className:"mb-8 flex flex-wrap gap-1 text-xs",children:[{href:"#connection",label:"Connection"},{href:"#account",label:"Account"},{href:"#resources",label:"Resources"}].map(e=>(0,s.jsx)("a",{href:e.href,className:"rounded-md px-2.5 py-1 text-gray-500 hover:text-cyan-300 hover:bg-cyan-500/10 transition-colors",children:e.label},e.href))}),(0,s.jsxs)("div",{className:"max-w-2xl space-y-10",children:[(0,s.jsxs)("div",{id:"connection",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Connection"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"CommHub Connection"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500 shrink-0",children:"Hub URL"}),(0,s.jsx)("span",{className:`text-cyan-300 ${j}`,children:e?.hub||"not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Config Source"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:e?.source==="file"?"Local file (~/.anet/config.json)":e?.source==="runtime-env"?"Vercel env vars":"Missing"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Auth Token"}),(0,s.jsx)("span",{className:`${e?.tokenConfigured?"text-green-400":"text-red-400"} ${j}`,children:e?.tokenConfigured?`Configured (${e.tokenPreview})`:"Not configured"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Server Auth"}),(0,s.jsx)("span",{className:`${l?.auth==="enabled"?"text-green-400":"text-yellow-400"} sm:text-right`,children:l?.auth||"--"})]}),e?.error&&(0,s.jsx)("div",{className:"border-t border-[#2a2a4a] pt-3 text-xs text-gray-600",children:e.error})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Server Info"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.version||"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Sessions"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sessions??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsxs)("span",{className:"text-gray-500",children:["SSE streams ",(0,s.jsx)("span",{className:"text-gray-600",children:"· server"})]}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.sse_connections??"--"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Uptime"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:l?.uptime?`${Math.floor(l.uptime/3600)}h ${Math.floor(l.uptime%3600/60)}m`:"--"})]})]})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Dashboard"}),(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Version"}),(0,s.jsx)("span",{className:`text-gray-300 font-mono ${j}`,title:"From package.json @sleep2agi/agent-network-dashboard",children:n.DASHBOARD_VERSION})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Data Layer"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"SWR (5s refresh, 3s dedup)"})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Pages"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:"Overview, Tasks, Nodes, Messages, Networks, Audit, Server Logs, Admin, Settings"})]})]})]})]}),(0,s.jsxs)("div",{id:"account",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Account"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsxs)("h2",{className:"text-sm font-semibold text-gray-300 mb-4 flex items-center gap-2",children:["License",i?.license&&(0,s.jsxs)("span",{className:`inline-flex items-center gap-1.5 text-[10px] font-medium px-2 py-0.5 rounded-full border ${"pro"===i.license.type?"text-green-300 bg-green-500/10 border-green-500/30":i.license.days_left<=7?"text-red-300 bg-red-500/10 border-red-500/30":"text-amber-300 bg-amber-500/10 border-amber-500/30"}`,children:[(0,s.jsx)("span",{"aria-hidden":!0,className:"w-1.5 h-1.5 rounded-full bg-current"}),i.license.type,i.license.days_left?` \xb7 ${i.license.days_left}d left`:""]})]}),i?.license?(0,s.jsxs)("div",{className:"space-y-3 text-sm",children:[i.license.days_left<=7&&(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-red-400 font-medium",children:"⚠ Expiring soon"}),(0,s.jsxs)("span",{className:"text-red-400",children:[i.license.days_left," days left"]})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Expires"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.license.expires_at})]}),i.limits&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Agents"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_agents})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Max Networks"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_networks})]}),(0,s.jsxs)("div",{className:b,children:[(0,s.jsx)("span",{className:"text-gray-500",children:"Tasks/Day"}),(0,s.jsx)("span",{className:`text-gray-300 ${j}`,children:i.limits.max_tasks_day})]})]}),(0,s.jsxs)("div",{className:"pt-3 border-t border-[#2a2a4a]",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:c,onChange:e=>d(e.target.value),placeholder:"anet-XXXX-XXXX-XXXX-XXXX",className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!c.trim())return;let e=await fetch("/api/hub/license",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:c})}),s=await e.json();x(s.ok?`Activated: ${s.type}`:`Failed: ${s.error}`),s.ok&&d(""),setTimeout(()=>x(""),5e3)},className:"px-3 py-2 bg-cyan-600 hover:bg-cyan-500 text-white text-xs rounded transition-colors",children:"Activate"})]}),o&&(0,s.jsx)("div",{className:`mt-2 text-xs ${o.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:o})]})]}):(0,s.jsx)("div",{className:"text-xs text-gray-600",children:"License info not available"})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Change Password"}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)("input",{type:"password",value:m,onChange:e=>h(e.target.value),placeholder:"Current password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("input",{type:"password",value:g,onChange:e=>u(e.target.value),placeholder:"New password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:outline-none"}),(0,s.jsx)("button",{onClick:async()=>{if(!m||!g)return;let e=sessionStorage.getItem("anet_v3_auth");if(!e)return void N("Not logged in with V3 auth");let{token:s}=JSON.parse(e),a=await fetch("/api/hub/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",token:s,current_password:m,new_password:g})}),t=await a.json();if(N(t.ok?"Password changed":`Failed: ${t.error}`),t.ok){if(t.token){let s=JSON.parse(e);sessionStorage.setItem("anet_v3_auth",JSON.stringify({...s,token:t.token}))}h(""),u("")}setTimeout(()=>N(""),5e3)},disabled:!m||!g,className:"px-4 py-2 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white text-sm rounded-lg transition-colors",children:"Change Password"})]}),p&&(0,s.jsx)("div",{className:`mt-2 text-xs ${p.startsWith("Failed")?"text-red-400":"text-green-400"}`,children:p})]}),(0,s.jsxs)("section",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-4",children:"Sign out"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Signing out clears your dashboard session cookie. You'll return to the login page."}),(0,s.jsx)("button",{onClick:async()=>{await fetch("/api/auth/logout",{method:"POST"}).catch(()=>{}),window.location.assign("/login")},className:"px-4 py-2 bg-transparent hover:bg-[#1a1a2a] text-gray-300 text-sm rounded-lg border border-[#2a2a4a] hover:border-[#3a3a5a] transition-colors",children:"Sign out"})]})]}),(0,s.jsxs)("div",{id:"resources",className:"space-y-4 scroll-mt-6",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,s.jsx)("div",{className:"text-[11px] uppercase tracking-[0.14em] text-gray-400 font-semibold",children:"Resources"}),(0,s.jsx)("div",{className:"flex-1 h-px bg-[#2a2a4a]"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,s.jsxs)(t.default,{href:"/settings/tokens",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"API Tokens"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create and manage tokens for CLI access."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]}),(0,s.jsxs)(t.default,{href:"/settings/networks",className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-5 hover:border-cyan-500/30 transition-colors",children:[(0,s.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:"Networks"}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-2",children:"Create, manage, and delete agent networks."}),(0,s.jsx)("span",{className:"text-xs text-cyan-400 mt-3 inline-block",children:"Manage →"})]})]})]})]})]})}])}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.6"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.1-preview.7"],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":351,"timestamp":131415878782,"id":4,"parentId":1,"tags":{},"startTime":1778939388125,"traceId":"ce0f0cad92414760"},{"name":"load-custom-routes","duration":712,"timestamp":131415879356,"id":5,"parentId":1,"tags":{},"startTime":1778939388126,"traceId":"ce0f0cad92414760"},{"name":"create-dist-dir","duration":738,"timestamp":131415880136,"id":6,"parentId":1,"tags":{},"startTime":1778939388126,"traceId":"ce0f0cad92414760"},{"name":"clean","duration":38716,"timestamp":131415881963,"id":7,"parentId":1,"tags":{},"startTime":1778939388128,"traceId":"ce0f0cad92414760"},{"name":"discover-routes","duration":26354,"timestamp":131416009404,"id":8,"parentId":1,"tags":{},"startTime":1778939388256,"traceId":"ce0f0cad92414760"},{"name":"create-root-mapping","duration":229,"timestamp":131416035825,"id":9,"parentId":1,"tags":{},"startTime":1778939388282,"traceId":"ce0f0cad92414760"},{"name":"generate-route-types","duration":24014,"timestamp":131416039289,"id":10,"parentId":1,"tags":{},"startTime":1778939388286,"traceId":"ce0f0cad92414760"},{"name":"public-dir-conflict-check","duration":104,"timestamp":131416063403,"id":11,"parentId":1,"tags":{},"startTime":1778939388310,"traceId":"ce0f0cad92414760"},{"name":"generate-routes-manifest","duration":6574,"timestamp":131416063639,"id":12,"parentId":1,"tags":{},"startTime":1778939388310,"traceId":"ce0f0cad92414760"},{"name":"run-turbopack","duration":7222642,"timestamp":131416086130,"id":14,"parentId":1,"tags":{},"startTime":1778939388332,"traceId":"ce0f0cad92414760"},{"name":"turbopack-build-events","duration":105,"timestamp":131416416110,"id":15,"parentId":1,"tags":{},"startTime":1778939388662,"traceId":"ce0f0cad92414760"},{"name":"run-typescript","duration":10135100,"timestamp":131423331030,"id":16,"parentId":1,"tags":{},"startTime":1778939395577,"traceId":"ce0f0cad92414760"},{"name":"generate-required-server-files","duration":3082,"timestamp":131433467253,"id":18,"parentId":1,"tags":{},"startTime":1778939405714,"traceId":"ce0f0cad92414760"},{"name":"check-static-error-page","duration":17520,"timestamp":131433650132,"id":20,"parentId":19,"tags":{},"startTime":1778939405896,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":563410,"timestamp":131433672643,"id":65,"parentId":22,"tags":{},"startTime":1778939405919,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":581913,"timestamp":131433654310,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778939405901,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":609934,"timestamp":131433672996,"id":68,"parentId":27,"tags":{},"startTime":1778939405919,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":624685,"timestamp":131433658362,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778939405905,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":615688,"timestamp":131433672258,"id":64,"parentId":21,"tags":{},"startTime":1778939405919,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":636062,"timestamp":131433652538,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778939405899,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":616845,"timestamp":131433673112,"id":69,"parentId":28,"tags":{},"startTime":1778939405919,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":631546,"timestamp":131433658485,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778939405905,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":620994,"timestamp":131433673595,"id":72,"parentId":32,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":635475,"timestamp":131433659179,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778939405905,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":620998,"timestamp":131433673829,"id":74,"parentId":34,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":635393,"timestamp":131433659469,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778939405906,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":645717,"timestamp":131433673878,"id":76,"parentId":36,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":659548,"timestamp":131433660128,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778939405906,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":657653,"timestamp":131433673917,"id":77,"parentId":37,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":671333,"timestamp":131433660305,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778939405907,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":663975,"timestamp":131433673382,"id":70,"parentId":29,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":678834,"timestamp":131433658602,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778939405905,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":672461,"timestamp":131433673857,"id":75,"parentId":35,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":686772,"timestamp":131433659608,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778939405906,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":672627,"timestamp":131433673935,"id":78,"parentId":38,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":686153,"timestamp":131433660446,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778939405907,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":674174,"timestamp":131433672777,"id":66,"parentId":25,"tags":{},"startTime":1778939405919,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":688986,"timestamp":131433658056,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778939405904,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":683517,"timestamp":131433676095,"id":82,"parentId":44,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":698202,"timestamp":131433661480,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778939405908,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":684327,"timestamp":131433676073,"id":81,"parentId":42,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":699421,"timestamp":131433661040,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778939405907,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":689235,"timestamp":131433673956,"id":80,"parentId":40,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":702567,"timestamp":131433660671,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778939405907,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":690928,"timestamp":131433676120,"id":84,"parentId":46,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":705314,"timestamp":131433661775,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778939405908,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":691738,"timestamp":131433676133,"id":85,"parentId":47,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":706040,"timestamp":131433661900,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778939405908,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":693050,"timestamp":131433676147,"id":86,"parentId":48,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":707219,"timestamp":131433662023,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778939405908,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":697758,"timestamp":131433676157,"id":87,"parentId":49,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":709916,"timestamp":131433664039,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778939405910,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":701990,"timestamp":131433673948,"id":79,"parentId":39,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":715420,"timestamp":131433660559,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778939405907,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":704025,"timestamp":131433676171,"id":88,"parentId":50,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":716059,"timestamp":131433664175,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778939405910,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":705453,"timestamp":131433676184,"id":89,"parentId":51,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":717415,"timestamp":131433664266,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778939405911,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":715430,"timestamp":131433672883,"id":67,"parentId":26,"tags":{},"startTime":1778939405919,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":730125,"timestamp":131433658238,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778939405905,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":711330,"timestamp":131433680474,"id":91,"parentId":31,"tags":{},"startTime":1778939405927,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":732981,"timestamp":131433658867,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778939405905,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":720935,"timestamp":131433673755,"id":73,"parentId":33,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":735412,"timestamp":131433659320,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778939405906,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":709384,"timestamp":131433685593,"id":93,"parentId":43,"tags":{},"startTime":1778939405932,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":733834,"timestamp":131433661203,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778939405907,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":719252,"timestamp":131433681230,"id":92,"parentId":41,"tags":{},"startTime":1778939405928,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":739763,"timestamp":131433660763,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778939405907,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":708642,"timestamp":131433697163,"id":95,"parentId":52,"tags":{},"startTime":1778939405943,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":741191,"timestamp":131433664660,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778939405911,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":736971,"timestamp":131433673529,"id":71,"parentId":30,"tags":{},"startTime":1778939405920,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":751794,"timestamp":131433658749,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778939405905,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":738589,"timestamp":131433676110,"id":83,"parentId":45,"tags":{},"startTime":1778939405922,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":753085,"timestamp":131433661657,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778939405908,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":717701,"timestamp":131433697205,"id":98,"parentId":55,"tags":{},"startTime":1778939405943,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":749731,"timestamp":131433665207,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778939405911,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":748573,"timestamp":131433679478,"id":90,"parentId":24,"tags":{},"startTime":1778939405926,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":773151,"timestamp":131433654957,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778939405901,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":730898,"timestamp":131433697350,"id":101,"parentId":59,"tags":{},"startTime":1778939405944,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":761817,"timestamp":131433666480,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778939405913,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":771888,"timestamp":131433697379,"id":103,"parentId":62,"tags":{},"startTime":1778939405944,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":802082,"timestamp":131433667260,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778939405914,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":784077,"timestamp":131433697392,"id":104,"parentId":63,"tags":{},"startTime":1778939405944,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":814135,"timestamp":131433667406,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778939405914,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":786598,"timestamp":131433697191,"id":97,"parentId":54,"tags":{},"startTime":1778939405943,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":818885,"timestamp":131433664986,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778939405911,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":789878,"timestamp":131433697228,"id":100,"parentId":58,"tags":{},"startTime":1778939405944,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":820912,"timestamp":131433666258,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778939405913,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":790482,"timestamp":131433697126,"id":94,"parentId":23,"tags":{},"startTime":1778939405943,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":833011,"timestamp":131433654645,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778939405901,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":791936,"timestamp":131433697405,"id":105,"parentId":60,"tags":{},"startTime":1778939405944,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":822722,"timestamp":131433666661,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778939405913,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":780266,"timestamp":131433711837,"id":106,"parentId":57,"tags":{},"startTime":1778939405958,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":826511,"timestamp":131433665636,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778939405912,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":803386,"timestamp":131433697177,"id":96,"parentId":53,"tags":{},"startTime":1778939405943,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":835795,"timestamp":131433664817,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778939405911,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":816392,"timestamp":131433697370,"id":102,"parentId":61,"tags":{},"startTime":1778939405944,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":846715,"timestamp":131433667106,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778939405913,"traceId":"ce0f0cad92414760"},{"name":"is-page-static","duration":823500,"timestamp":131433697219,"id":99,"parentId":56,"tags":{},"startTime":1778939405943,"traceId":"ce0f0cad92414760"},{"name":"check-page","duration":855361,"timestamp":131433665413,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778939405912,"traceId":"ce0f0cad92414760"},{"name":"static-check","duration":871888,"timestamp":131433648929,"id":19,"parentId":1,"tags":{},"startTime":1778939405895,"traceId":"ce0f0cad92414760"}]
2
- [{"name":"write-routes-manifest","duration":615,"timestamp":131434530280,"id":108,"parentId":1,"tags":{},"startTime":1778939406777,"traceId":"ce0f0cad92414760"},{"name":"load-dotenv","duration":69,"timestamp":131434544185,"id":111,"parentId":110,"tags":{},"startTime":1778939406790,"traceId":"ce0f0cad92414760"},{"name":"run-export-path-map","duration":912,"timestamp":131434547527,"id":112,"parentId":110,"tags":{},"startTime":1778939406794,"traceId":"ce0f0cad92414760"},{"name":"next-export","duration":659726,"timestamp":131434542294,"id":110,"parentId":1,"tags":{},"startTime":1778939406789,"traceId":"ce0f0cad92414760"},{"name":"move-exported-app-not-found-","duration":688,"timestamp":131435205647,"id":113,"parentId":109,"tags":{},"startTime":1778939407452,"traceId":"ce0f0cad92414760"},{"name":"move-exported-app-global-error-","duration":450,"timestamp":131435206469,"id":114,"parentId":109,"tags":{},"startTime":1778939407453,"traceId":"ce0f0cad92414760"},{"name":"static-generation","duration":674341,"timestamp":131434535045,"id":109,"parentId":1,"tags":{},"startTime":1778939406781,"traceId":"ce0f0cad92414760"},{"name":"write-routes-manifest","duration":710,"timestamp":131435209770,"id":115,"parentId":1,"tags":{},"startTime":1778939407456,"traceId":"ce0f0cad92414760"},{"name":"print-tree-view","duration":5510,"timestamp":131435220390,"id":116,"parentId":1,"tags":{},"startTime":1778939407467,"traceId":"ce0f0cad92414760"},{"name":"write-route-bundle-stats","duration":18580,"timestamp":131435225947,"id":117,"parentId":1,"tags":{},"startTime":1778939407472,"traceId":"ce0f0cad92414760"},{"name":"telemetry-flush","duration":250058,"timestamp":131435244558,"id":118,"parentId":1,"tags":{},"startTime":1778939407491,"traceId":"ce0f0cad92414760"},{"name":"next-build","duration":19672965,"timestamp":131415821709,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778939388068,"traceId":"ce0f0cad92414760"}]
1
+ [{"name":"generate-buildid","duration":288,"timestamp":132157128962,"id":4,"parentId":1,"tags":{},"startTime":1778940129375,"traceId":"c660a2c0a0ad4112"},{"name":"load-custom-routes","duration":449,"timestamp":132157129389,"id":5,"parentId":1,"tags":{},"startTime":1778940129376,"traceId":"c660a2c0a0ad4112"},{"name":"create-dist-dir","duration":722,"timestamp":132157129879,"id":6,"parentId":1,"tags":{},"startTime":1778940129376,"traceId":"c660a2c0a0ad4112"},{"name":"clean","duration":33820,"timestamp":132157131294,"id":7,"parentId":1,"tags":{},"startTime":1778940129378,"traceId":"c660a2c0a0ad4112"},{"name":"discover-routes","duration":27849,"timestamp":132157251972,"id":8,"parentId":1,"tags":{},"startTime":1778940129498,"traceId":"c660a2c0a0ad4112"},{"name":"create-root-mapping","duration":216,"timestamp":132157279888,"id":9,"parentId":1,"tags":{},"startTime":1778940129526,"traceId":"c660a2c0a0ad4112"},{"name":"generate-route-types","duration":28868,"timestamp":132157282726,"id":10,"parentId":1,"tags":{},"startTime":1778940129529,"traceId":"c660a2c0a0ad4112"},{"name":"public-dir-conflict-check","duration":136,"timestamp":132157311699,"id":11,"parentId":1,"tags":{},"startTime":1778940129558,"traceId":"c660a2c0a0ad4112"},{"name":"generate-routes-manifest","duration":5268,"timestamp":132157312053,"id":12,"parentId":1,"tags":{},"startTime":1778940129558,"traceId":"c660a2c0a0ad4112"},{"name":"run-turbopack","duration":6415483,"timestamp":132157331842,"id":14,"parentId":1,"tags":{},"startTime":1778940129578,"traceId":"c660a2c0a0ad4112"},{"name":"turbopack-build-events","duration":113,"timestamp":132157648745,"id":15,"parentId":1,"tags":{},"startTime":1778940129895,"traceId":"c660a2c0a0ad4112"},{"name":"run-typescript","duration":9877848,"timestamp":132163764299,"id":16,"parentId":1,"tags":{},"startTime":1778940136011,"traceId":"c660a2c0a0ad4112"},{"name":"generate-required-server-files","duration":2547,"timestamp":132173643428,"id":18,"parentId":1,"tags":{},"startTime":1778940145890,"traceId":"c660a2c0a0ad4112"},{"name":"check-static-error-page","duration":12768,"timestamp":132173825125,"id":20,"parentId":19,"tags":{},"startTime":1778940146071,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":518832,"timestamp":132173841657,"id":65,"parentId":22,"tags":{},"startTime":1778940146088,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":533311,"timestamp":132173827343,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778940146074,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":598517,"timestamp":132173841910,"id":67,"parentId":26,"tags":{},"startTime":1778940146088,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":610729,"timestamp":132173829802,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778940146076,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":613675,"timestamp":132173842680,"id":72,"parentId":32,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":625813,"timestamp":132173830623,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778940146077,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":620974,"timestamp":132173842837,"id":73,"parentId":33,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":633115,"timestamp":132173830765,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778940146077,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":630120,"timestamp":132173842915,"id":74,"parentId":34,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":642254,"timestamp":132173830888,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778940146077,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":638633,"timestamp":132173842959,"id":75,"parentId":35,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":650604,"timestamp":132173831049,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778940146077,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":643880,"timestamp":132173841353,"id":64,"parentId":21,"tags":{},"startTime":1778940146088,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":659044,"timestamp":132173826246,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778940146073,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":644288,"timestamp":132173842976,"id":76,"parentId":36,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":655745,"timestamp":132173831567,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778940146078,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":647601,"timestamp":132173842615,"id":71,"parentId":30,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":660045,"timestamp":132173830224,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778940146076,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":652092,"timestamp":132173842451,"id":70,"parentId":29,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":664468,"timestamp":132173830118,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778940146076,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":653115,"timestamp":132173843051,"id":79,"parentId":39,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":664154,"timestamp":132173832050,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778940146078,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":655721,"timestamp":132173841799,"id":66,"parentId":25,"tags":{},"startTime":1778940146088,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":667908,"timestamp":132173829654,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778940146076,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":664182,"timestamp":132173843041,"id":78,"parentId":38,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":675357,"timestamp":132173831911,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778940146078,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":664478,"timestamp":132173843091,"id":82,"parentId":44,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":674802,"timestamp":132173832808,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778940146079,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":664787,"timestamp":132173843077,"id":81,"parentId":42,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":675520,"timestamp":132173832390,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778940146079,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":667248,"timestamp":132173842182,"id":69,"parentId":28,"tags":{},"startTime":1778940146088,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":679448,"timestamp":132173830024,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778940146076,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":672115,"timestamp":132173843127,"id":85,"parentId":47,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":682130,"timestamp":132173833165,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778940146079,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":683118,"timestamp":132173843148,"id":87,"parentId":49,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":691532,"timestamp":132173834785,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778940146081,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":686065,"timestamp":132173842059,"id":68,"parentId":27,"tags":{},"startTime":1778940146088,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":698273,"timestamp":132173829903,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778940146076,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":685308,"timestamp":132173843064,"id":80,"parentId":40,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":696270,"timestamp":132173832140,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778940146078,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":690101,"timestamp":132173843101,"id":83,"parentId":45,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":700289,"timestamp":132173832958,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778940146079,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":690224,"timestamp":132173843161,"id":88,"parentId":50,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":698564,"timestamp":132173834849,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778940146081,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":695812,"timestamp":132173843135,"id":86,"parentId":48,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":704354,"timestamp":132173834641,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778940146081,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":683940,"timestamp":132173856561,"id":92,"parentId":41,"tags":{},"startTime":1778940146103,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":708340,"timestamp":132173832204,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778940146078,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":698075,"timestamp":132173854609,"id":91,"parentId":31,"tags":{},"startTime":1778940146101,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":722401,"timestamp":132173830337,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778940146077,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":709924,"timestamp":132173843115,"id":84,"parentId":46,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":720008,"timestamp":132173833079,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778940146079,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":719258,"timestamp":132173843023,"id":77,"parentId":37,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":730566,"timestamp":132173831768,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778940146078,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":713071,"timestamp":132173849582,"id":90,"parentId":24,"tags":{},"startTime":1778940146096,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":734964,"timestamp":132173827735,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778940146074,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":708454,"timestamp":132173859185,"id":93,"parentId":43,"tags":{},"startTime":1778940146105,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":735162,"timestamp":132173832527,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778940146079,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":703496,"timestamp":132173866610,"id":97,"parentId":54,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":734661,"timestamp":132173835487,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778940146082,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":731045,"timestamp":132173843174,"id":89,"parentId":51,"tags":{},"startTime":1778940146089,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":739364,"timestamp":132173834907,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778940146081,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":710804,"timestamp":132173866647,"id":100,"parentId":58,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":741082,"timestamp":132173836415,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778940146083,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":718293,"timestamp":132173866784,"id":102,"parentId":61,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":747822,"timestamp":132173837322,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778940146084,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":731771,"timestamp":132173866796,"id":103,"parentId":62,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":761143,"timestamp":132173837485,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778940146084,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":739452,"timestamp":132173866809,"id":104,"parentId":63,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":768670,"timestamp":132173837641,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778940146084,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":744553,"timestamp":132173866544,"id":94,"parentId":23,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":783626,"timestamp":132173827531,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778940146074,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":733044,"timestamp":132173880808,"id":105,"parentId":60,"tags":{},"startTime":1778940146127,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":777080,"timestamp":132173836813,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778940146083,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":752908,"timestamp":132173866580,"id":95,"parentId":52,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":784276,"timestamp":132173835257,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778940146082,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":707944,"timestamp":132173911857,"id":106,"parentId":57,"tags":{},"startTime":1778940146158,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":783924,"timestamp":132173835916,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778940146082,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":755911,"timestamp":132173866597,"id":96,"parentId":53,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":787171,"timestamp":132173835383,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778940146082,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":760702,"timestamp":132173866634,"id":99,"parentId":56,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":791624,"timestamp":132173835755,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778940146082,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":768941,"timestamp":132173866619,"id":98,"parentId":55,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":799977,"timestamp":132173835621,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778940146082,"traceId":"c660a2c0a0ad4112"},{"name":"is-page-static","duration":780604,"timestamp":132173866763,"id":101,"parentId":59,"tags":{},"startTime":1778940146113,"traceId":"c660a2c0a0ad4112"},{"name":"check-page","duration":810774,"timestamp":132173836630,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778940146083,"traceId":"c660a2c0a0ad4112"},{"name":"static-check","duration":823165,"timestamp":132173824284,"id":19,"parentId":1,"tags":{},"startTime":1778940146071,"traceId":"c660a2c0a0ad4112"}]
2
+ [{"name":"write-routes-manifest","duration":462,"timestamp":132174658270,"id":108,"parentId":1,"tags":{},"startTime":1778940146905,"traceId":"c660a2c0a0ad4112"},{"name":"load-dotenv","duration":41,"timestamp":132174669553,"id":111,"parentId":110,"tags":{},"startTime":1778940146916,"traceId":"c660a2c0a0ad4112"},{"name":"run-export-path-map","duration":754,"timestamp":132174672384,"id":112,"parentId":110,"tags":{},"startTime":1778940146919,"traceId":"c660a2c0a0ad4112"},{"name":"next-export","duration":573343,"timestamp":132174668353,"id":110,"parentId":1,"tags":{},"startTime":1778940146915,"traceId":"c660a2c0a0ad4112"},{"name":"move-exported-app-not-found-","duration":531,"timestamp":132175244800,"id":113,"parentId":109,"tags":{},"startTime":1778940147491,"traceId":"c660a2c0a0ad4112"},{"name":"move-exported-app-global-error-","duration":621,"timestamp":132175245427,"id":114,"parentId":109,"tags":{},"startTime":1778940147492,"traceId":"c660a2c0a0ad4112"},{"name":"static-generation","duration":585815,"timestamp":132174662383,"id":109,"parentId":1,"tags":{},"startTime":1778940146909,"traceId":"c660a2c0a0ad4112"},{"name":"write-routes-manifest","duration":496,"timestamp":132175248486,"id":115,"parentId":1,"tags":{},"startTime":1778940147495,"traceId":"c660a2c0a0ad4112"},{"name":"print-tree-view","duration":3914,"timestamp":132175267483,"id":116,"parentId":1,"tags":{},"startTime":1778940147514,"traceId":"c660a2c0a0ad4112"},{"name":"write-route-bundle-stats","duration":11682,"timestamp":132175271436,"id":117,"parentId":1,"tags":{},"startTime":1778940147518,"traceId":"c660a2c0a0ad4112"},{"name":"telemetry-flush","duration":28930,"timestamp":132175283147,"id":118,"parentId":1,"tags":{},"startTime":1778940147529,"traceId":"c660a2c0a0ad4112"},{"name":"next-build","duration":18235332,"timestamp":132157076787,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940129323,"traceId":"c660a2c0a0ad4112"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":7222642,"timestamp":131416086130,"id":14,"parentId":1,"tags":{},"startTime":1778939388332,"traceId":"ce0f0cad92414760"},{"name":"turbopack-build-events","duration":105,"timestamp":131416416110,"id":15,"parentId":1,"tags":{},"startTime":1778939388662,"traceId":"ce0f0cad92414760"},{"name":"run-typescript","duration":10135100,"timestamp":131423331030,"id":16,"parentId":1,"tags":{},"startTime":1778939395577,"traceId":"ce0f0cad92414760"},{"name":"static-check","duration":871888,"timestamp":131433648929,"id":19,"parentId":1,"tags":{},"startTime":1778939405895,"traceId":"ce0f0cad92414760"},{"name":"static-generation","duration":674341,"timestamp":131434535045,"id":109,"parentId":1,"tags":{},"startTime":1778939406781,"traceId":"ce0f0cad92414760"},{"name":"telemetry-flush","duration":250058,"timestamp":131435244558,"id":118,"parentId":1,"tags":{},"startTime":1778939407491,"traceId":"ce0f0cad92414760"},{"name":"next-build","duration":19672965,"timestamp":131415821709,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778939388068,"traceId":"ce0f0cad92414760"}]
1
+ [{"name":"run-turbopack","duration":6415483,"timestamp":132157331842,"id":14,"parentId":1,"tags":{},"startTime":1778940129578,"traceId":"c660a2c0a0ad4112"},{"name":"turbopack-build-events","duration":113,"timestamp":132157648745,"id":15,"parentId":1,"tags":{},"startTime":1778940129895,"traceId":"c660a2c0a0ad4112"},{"name":"run-typescript","duration":9877848,"timestamp":132163764299,"id":16,"parentId":1,"tags":{},"startTime":1778940136011,"traceId":"c660a2c0a0ad4112"},{"name":"static-check","duration":823165,"timestamp":132173824284,"id":19,"parentId":1,"tags":{},"startTime":1778940146071,"traceId":"c660a2c0a0ad4112"},{"name":"static-generation","duration":585815,"timestamp":132174662383,"id":109,"parentId":1,"tags":{},"startTime":1778940146909,"traceId":"c660a2c0a0ad4112"},{"name":"telemetry-flush","duration":28930,"timestamp":132175283147,"id":118,"parentId":1,"tags":{},"startTime":1778940147529,"traceId":"c660a2c0a0ad4112"},{"name":"next-build","duration":18235332,"timestamp":132157076787,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778940129323,"traceId":"c660a2c0a0ad4112"}]
@@ -1026,6 +1026,30 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1026
1026
  // navigation footer. Drives the on-hover opacity boost + underline
1027
1027
  // that signals interactivity, mirroring the hoveredHub idiom above.
1028
1028
  const [hoveredRecentMore, setHoveredRecentMore] = useState(false);
1029
+ // Round 346 / Loop: minimap-container hover affordance. The minimap
1030
+ // is a click-target (role=button at line ~7810, recenter-on-click +
1031
+ // Enter→resetView) but pre-R346 nothing visually changed on hover —
1032
+ // the only hint was the `cursor: crosshair` style. R346 lifts the
1033
+ // viewport rect (strokeWidth 1.5 → 1.75 + opacity 0.9 → 1.0) when
1034
+ // the user enters the minimap, marking "this is the recenter target
1035
+ // and it's alive". Sibling polish to the R332 minimap rounded-md →
1036
+ // rounded-lg corner family — that round refined geometry, this one
1037
+ // gives the viewport indicator inside the geometry a hover state.
1038
+ // 280ms ease-out transition list matches R199 smoothView vocabulary
1039
+ // so the visual joins the existing rhythm on the same rect.
1040
+ const [hoveredMinimap, setHoveredMinimap] = useState(false);
1041
+ // Round 347 / Loop: zoom-level readout hover-state letter-spacing
1042
+ // tween (0 → 0.5 px). The readout sandwiched between zoom-out /
1043
+ // zoom-in is a passive percent display — pre-R347 it had no hover
1044
+ // feedback at all (only a `title` tooltip). R347 extends the R344
1045
+ // (`+N more flows` footer) + R345 (panel titles) hover-letter-
1046
+ // spacing family from panel/footer surfaces into the HTML chrome
1047
+ // strip. Hovering the readout spreads its digits 0.5 px, signalling
1048
+ // "this is alive". tabular-nums + minWidth: 46 from R225 still lock
1049
+ // the column so the tween doesn't shove neighbouring controls.
1050
+ // 200ms ease-out joins the existing R264 color/border transition
1051
+ // list on the same span.
1052
+ const [hoveredZoomLevel, setHoveredZoomLevel] = useState(false);
1029
1053
  // R135: panel-wide hover-elevation. The recent-signal + legend
1030
1054
  // panels both already host clickable rows (R56/R116 recent rows,
1031
1055
  // R55/R61 legend rows) and a clickable footer (R133), so the
@@ -7827,7 +7851,13 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7827
7851
  resetView();
7828
7852
  }
7829
7853
  }}
7854
+ // R346: viewport rect hover affordance driven by parent.
7855
+ onMouseEnter={() => setHoveredMinimap(true)}
7856
+ onMouseLeave={() => setHoveredMinimap(false)}
7857
+ onFocus={() => setHoveredMinimap(true)}
7858
+ onBlur={() => setHoveredMinimap(false)}
7830
7859
  data-topo-minimap
7860
+ data-topo-minimap-hovered={hoveredMinimap ? 'true' : 'false'}
7831
7861
  >
7832
7862
  <svg width={MW} height={MH} viewBox={`0 0 ${MW} ${MH}`} style={{ display: 'block' }}>
7833
7863
  {/* Round 198 / Loop: minimap dots gain smooth status
@@ -7906,13 +7936,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
7906
7936
  x={Math.max(0, rectX)} y={Math.max(0, rectY)}
7907
7937
  width={Math.max(0, Math.min(MW - Math.max(0, rectX), rectW))}
7908
7938
  height={Math.max(0, Math.min(MH - Math.max(0, rectY), rectH))}
7909
- fill="none" stroke={pal.legendAccent} strokeWidth="1.5" opacity="0.9"
7939
+ fill="none" stroke={pal.legendAccent}
7940
+ // R346: strokeWidth + opacity tween on container hover.
7941
+ strokeWidth={hoveredMinimap ? '1.75' : '1.5'}
7942
+ opacity={hoveredMinimap ? '1' : '0.9'}
7910
7943
  data-topo-minimap-viewport
7911
7944
  data-topo-minimap-viewport-smooth={smoothView ? 'true' : 'false'}
7945
+ data-topo-minimap-viewport-hover={hoveredMinimap ? 'true' : 'false'}
7912
7946
  style={{
7913
7947
  transition: smoothView
7914
- ? 'x 280ms ease-out, y 280ms ease-out, width 280ms ease-out, height 280ms ease-out'
7915
- : 'none',
7948
+ ? 'x 280ms ease-out, y 280ms ease-out, width 280ms ease-out, height 280ms ease-out, stroke-width 200ms ease-out, opacity 200ms ease-out'
7949
+ : 'stroke-width 200ms ease-out, opacity 200ms ease-out',
7916
7950
  } as React.CSSProperties}
7917
7951
  />
7918
7952
  </svg>
@@ -8123,11 +8157,17 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8123
8157
  chromePopping === 'zoom-in' || chromePopping === 'zoom-out'
8124
8158
  ? 'true' : 'false'
8125
8159
  }
8160
+ data-topo-chrome-zoom-level-hover={hoveredZoomLevel ? 'true' : 'false'}
8161
+ onMouseEnter={() => setHoveredZoomLevel(true)}
8162
+ onMouseLeave={() => setHoveredZoomLevel(false)}
8126
8163
  style={{
8127
8164
  color: pal.legendText,
8128
8165
  borderColor: pal.containerBorder,
8129
8166
  minWidth: 46,
8130
8167
  display: 'inline-block',
8168
+ // R347: letter-spacing hover tween — extends R344/R345
8169
+ // hover-letter-spacing family into the chrome strip.
8170
+ letterSpacing: hoveredZoomLevel ? '0.5px' : '0',
8131
8171
  /* Round 264 / Loop: zoom level readout gains theme-toggle
8132
8172
  transition. The span has theme-driven color (pal.
8133
8173
  legendText) + border-x (pal.containerBorder via the
@@ -8136,7 +8176,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
8136
8176
  on theme flip while siblings eased. Sibling treatment
8137
8177
  to the nodeSize + zoom wrapper transitions added this
8138
8178
  round. */
8139
- transition: 'color 200ms ease-out, border-color 200ms ease-out',
8179
+ transition: 'color 200ms ease-out, border-color 200ms ease-out, letter-spacing 200ms ease-out',
8140
8180
  }}
8141
8181
  title="Current zoom level"
8142
8182
  >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.1-preview.6",
3
+ "version": "0.5.1-preview.8",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,109 @@
1
+ /* Round 346 verification: minimap viewport rect gains a hover-state
2
+ * affordance — strokeWidth 1.5 → 1.75 + opacity 0.9 → 1.0 when the
3
+ * user enters the minimap container. The minimap is a recenter click-
4
+ * target (role=button at line ~7810), but pre-R346 the only hover hint
5
+ * was `cursor: crosshair`. R346 lifts the viewport rect to mark "this
6
+ * is the recenter target and it's alive". Sibling polish to R332
7
+ * minimap rounded-md → rounded-lg corner family — that round refined
8
+ * geometry, this one gives the viewport indicator inside the geometry
9
+ * a hover state.
10
+ *
11
+ * Contract:
12
+ * - Rest: viewport rect stroke-width=1.5, opacity=0.9.
13
+ * - Hover container: stroke-width=1.75, opacity=1.
14
+ * - Inline transition list contains 'stroke-width' AND 'opacity'.
15
+ * - data-topo-minimap-hovered toggles 'false' → 'true' on enter.
16
+ * - data-topo-minimap-viewport-hover mirrors hover state on the rect.
17
+ * - Pre-R346 invariants intact: rect still data-topo-minimap-viewport,
18
+ * R287 stroke=1.5 rest value, R199 smoothView transition list
19
+ * extended (not replaced).
20
+ */
21
+ import { chromium } from 'playwright';
22
+ import { readFileSync } from 'node:fs';
23
+
24
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
25
+ const browser = await chromium.launch({ headless: true });
26
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
27
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
28
+ await ctx.addInitScript(() => {
29
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
30
+ });
31
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
32
+ await ctx.route('**/api/hub/status*', async (route) => {
33
+ const r = await route.fetch();
34
+ const b = await r.json();
35
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
36
+ const mk = (alias) => ({
37
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
38
+ network_id: nid, project_dir: null,
39
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
40
+ });
41
+ await route.fulfill({ response: r, json: { ...b, sessions: [
42
+ mk('alpha-1'), mk('alpha-2'), mk('alpha-3'),
43
+ mk('beta-1'), mk('beta-2'), mk('beta-3'),
44
+ mk('gamma-1'), mk('gamma-2'), mk('gamma-3'),
45
+ ] } });
46
+ });
47
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
48
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
49
+
50
+ const page = await ctx.newPage();
51
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
52
+ // Minimap only mounts when view is non-default (zoom !== 1 or pan).
53
+ // Click zoom-in to trigger mount.
54
+ await page.waitForSelector('[data-topo-chrome-zoom-in]', { timeout: 15000 });
55
+ await page.click('[data-topo-chrome-zoom-in]');
56
+ await page.waitForTimeout(200);
57
+ await page.click('[data-topo-chrome-zoom-in]');
58
+ await page.waitForSelector('[data-topo-minimap-viewport]', { timeout: 5000 });
59
+ await page.waitForTimeout(400);
60
+
61
+ // Rest probe.
62
+ const restProbe = await page.evaluate(() => {
63
+ const rect = document.querySelector('[data-topo-minimap-viewport]');
64
+ const container = document.querySelector('[data-topo-minimap]');
65
+ return {
66
+ strokeWidth: rect?.getAttribute('stroke-width') ?? null,
67
+ opacity: rect?.getAttribute('opacity') ?? null,
68
+ transition: rect ? getComputedStyle(rect).transition : null,
69
+ rectHoverAttr: rect?.getAttribute('data-topo-minimap-viewport-hover') ?? null,
70
+ contHoverAttr: container?.getAttribute('data-topo-minimap-hovered') ?? null,
71
+ };
72
+ });
73
+
74
+ // Hover the minimap container.
75
+ await page.hover('[data-topo-minimap]');
76
+ await page.waitForTimeout(250);
77
+ const hoverProbe = await page.evaluate(() => {
78
+ const rect = document.querySelector('[data-topo-minimap-viewport]');
79
+ const container = document.querySelector('[data-topo-minimap]');
80
+ return {
81
+ strokeWidth: rect?.getAttribute('stroke-width') ?? null,
82
+ opacity: rect?.getAttribute('opacity') ?? null,
83
+ rectHoverAttr: rect?.getAttribute('data-topo-minimap-viewport-hover') ?? null,
84
+ contHoverAttr: container?.getAttribute('data-topo-minimap-hovered') ?? null,
85
+ };
86
+ });
87
+
88
+ await browser.close();
89
+
90
+ const hasTrans = (s, prop) =>
91
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
92
+
93
+ const results = {
94
+ rest_sw_1_5: restProbe.strokeWidth === '1.5',
95
+ rest_op_0_9: restProbe.opacity === '0.9',
96
+ rest_cont_false: restProbe.contHoverAttr === 'false',
97
+ rest_rect_false: restProbe.rectHoverAttr === 'false',
98
+ trans_has_strokew: hasTrans(restProbe.transition, 'stroke-width'),
99
+ trans_has_opacity: hasTrans(restProbe.transition, 'opacity'),
100
+ hover_sw_1_75: hoverProbe.strokeWidth === '1.75',
101
+ hover_op_1: hoverProbe.opacity === '1',
102
+ hover_cont_true: hoverProbe.contHoverAttr === 'true',
103
+ hover_rect_true: hoverProbe.rectHoverAttr === 'true',
104
+ };
105
+ const ok = Object.values(results).every(Boolean);
106
+ console.log(`${ok ? '✅' : '❌'} minimap viewport hover affordance:`, JSON.stringify(results),
107
+ '\n rest: ', restProbe,
108
+ '\n hover:', hoverProbe);
109
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,91 @@
1
+ /* Round 347 verification: zoom-level readout in the chrome strip
2
+ * gains a hover-state letter-spacing tween 0 → 0.5 px. Extends the
3
+ * R344/R345 hover-letter-spacing family from panel/footer surfaces
4
+ * into the HTML chrome strip. The readout is sandwiched between
5
+ * zoom-out / zoom-in buttons; hovering it spreads digits 0.5 px,
6
+ * signalling "this is alive". tabular-nums + minWidth: 46 from R225
7
+ * lock the column so the tween doesn't shove neighbouring controls.
8
+ *
9
+ * Contract:
10
+ * - Rest: zoom-level letter-spacing 0 (or 'normal' / '0px').
11
+ * - Hover: letter-spacing 0.5px.
12
+ * - data-topo-chrome-zoom-level-hover toggles false → true.
13
+ * - transition list contains 'letter-spacing'.
14
+ * - Pre-R347 invariants intact: R264 color + border-color transitions
15
+ * preserved; tabular-nums + minWidth=46 still applied.
16
+ */
17
+ import { chromium } from 'playwright';
18
+ import { readFileSync } from 'node:fs';
19
+
20
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
21
+ const browser = await chromium.launch({ headless: true });
22
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
23
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
24
+ await ctx.addInitScript(() => {
25
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
26
+ });
27
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
28
+ await ctx.route('**/api/hub/status*', async (route) => {
29
+ const r = await route.fetch();
30
+ const b = await r.json();
31
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
32
+ const mk = (alias) => ({
33
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'claude-code-cli',
34
+ network_id: nid, project_dir: null,
35
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
36
+ });
37
+ await route.fulfill({ response: r, json: { ...b, sessions: [ mk('a'), mk('b'), mk('c') ] } });
38
+ });
39
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
40
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
41
+
42
+ const page = await ctx.newPage();
43
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
44
+ await page.waitForSelector('[data-topo-chrome-zoom-level]', { timeout: 15000 });
45
+ await page.waitForTimeout(400);
46
+
47
+ const restProbe = await page.evaluate(() => {
48
+ const el = document.querySelector('[data-topo-chrome-zoom-level]');
49
+ const cs = el ? getComputedStyle(el) : null;
50
+ return {
51
+ ls: cs?.letterSpacing ?? null,
52
+ transition: cs?.transition ?? null,
53
+ hoverAttr: el?.getAttribute('data-topo-chrome-zoom-level-hover') ?? null,
54
+ minWidth: cs?.minWidth ?? null,
55
+ fontVariant: cs?.fontVariantNumeric ?? null,
56
+ };
57
+ });
58
+
59
+ await page.hover('[data-topo-chrome-zoom-level]');
60
+ await page.waitForTimeout(250);
61
+ const hoverProbe = await page.evaluate(() => {
62
+ const el = document.querySelector('[data-topo-chrome-zoom-level]');
63
+ const cs = el ? getComputedStyle(el) : null;
64
+ return {
65
+ ls: cs?.letterSpacing ?? null,
66
+ hoverAttr: el?.getAttribute('data-topo-chrome-zoom-level-hover') ?? null,
67
+ };
68
+ });
69
+
70
+ await browser.close();
71
+
72
+ const hasTrans = (s, prop) =>
73
+ new RegExp(`${prop}\\s+\\d*\\.?\\d*s|${prop}\\s+\\d+ms`, 'i').test(s || '');
74
+ const isRestLs = (v) => v === 'normal' || v === '0px' || v === '0' || v === null;
75
+
76
+ const results = {
77
+ rest_ls_zero: isRestLs(restProbe.ls),
78
+ rest_hover_attr_false: restProbe.hoverAttr === 'false',
79
+ trans_has_letterspacing: hasTrans(restProbe.transition, 'letter-spacing'),
80
+ trans_has_color: hasTrans(restProbe.transition, 'color'), // R264 preserved
81
+ trans_has_border: hasTrans(restProbe.transition, 'border-color'),
82
+ min_width_46: restProbe.minWidth === '46px',
83
+ tabular_nums: /tabular-nums/.test(restProbe.fontVariant || ''),
84
+ hover_ls_0_5: hoverProbe.ls === '0.5px',
85
+ hover_attr_true: hoverProbe.hoverAttr === 'true',
86
+ };
87
+ const ok = Object.values(results).every(Boolean);
88
+ console.log(`${ok ? '✅' : '❌'} zoom level hover letter-spacing:`, JSON.stringify(results),
89
+ '\n rest: ', restProbe,
90
+ '\n hover:', hoverProbe);
91
+ process.exit(ok ? 0 : 1);