@sleep2agi/agent-network-dashboard 0.5.3-preview.261 → 0.5.3-preview.262

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 (141) 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 +5 -5
  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/[root-of-the-server]__0sv~g.o._.js +1 -1
  121. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  126. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  127. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  128. package/.next/server/middleware-build-manifest.js +3 -3
  129. package/.next/server/pages/404.html +1 -1
  130. package/.next/server/pages/500.html +1 -1
  131. package/.next/static/chunks/{0nd-y~i5proep.js → 01~4zvq_o_k32.js} +1 -1
  132. package/.next/static/chunks/{0-vlr8~b0f-cx.js → 070._s.6bq1dx.js} +1 -1
  133. package/.next/static/chunks/{0ztakmtfxkgya.js → 0vuc69a~-fb7u.js} +1 -1
  134. package/.next/static/chunks/{08.pwokcpknmp.js → 0~~5hvnaek6hz.js} +1 -1
  135. package/.next/trace +2 -2
  136. package/.next/trace-build +1 -1
  137. package/app/components/TopoGraph.tsx +95 -145
  138. package/package.json +4 -4
  139. /package/.next/static/{CLsgsYpGMRUiIcJJK3xkR → uxzbzXUe6BEA30oLCqiD_}/_buildManifest.js +0 -0
  140. /package/.next/static/{CLsgsYpGMRUiIcJJK3xkR → uxzbzXUe6BEA30oLCqiD_}/_clientMiddlewareManifest.js +0 -0
  141. /package/.next/static/{CLsgsYpGMRUiIcJJK3xkR → uxzbzXUe6BEA30oLCqiD_}/_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.3-preview.261"],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.3-preview.262"],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 →"})]})]})]})]})]})}])}]);
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":269,"timestamp":540110132399,"id":4,"parentId":1,"tags":{},"startTime":1779348082379,"traceId":"287f280b1a988944"},{"name":"load-custom-routes","duration":598,"timestamp":540110132848,"id":5,"parentId":1,"tags":{},"startTime":1779348082379,"traceId":"287f280b1a988944"},{"name":"create-dist-dir","duration":4568,"timestamp":540110133582,"id":6,"parentId":1,"tags":{},"startTime":1779348082380,"traceId":"287f280b1a988944"},{"name":"clean","duration":40574,"timestamp":540110138847,"id":7,"parentId":1,"tags":{},"startTime":1779348082385,"traceId":"287f280b1a988944"},{"name":"discover-routes","duration":8900,"timestamp":540110271255,"id":8,"parentId":1,"tags":{},"startTime":1779348082518,"traceId":"287f280b1a988944"},{"name":"create-root-mapping","duration":123,"timestamp":540110280216,"id":9,"parentId":1,"tags":{},"startTime":1779348082526,"traceId":"287f280b1a988944"},{"name":"generate-route-types","duration":27033,"timestamp":540110282999,"id":10,"parentId":1,"tags":{},"startTime":1779348082529,"traceId":"287f280b1a988944"},{"name":"public-dir-conflict-check","duration":99,"timestamp":540110310125,"id":11,"parentId":1,"tags":{},"startTime":1779348082556,"traceId":"287f280b1a988944"},{"name":"generate-routes-manifest","duration":4617,"timestamp":540110310353,"id":12,"parentId":1,"tags":{},"startTime":1779348082557,"traceId":"287f280b1a988944"},{"name":"run-turbopack","duration":9231797,"timestamp":540110320085,"id":14,"parentId":1,"tags":{},"startTime":1779348082566,"traceId":"287f280b1a988944"},{"name":"turbopack-build-events","duration":134,"timestamp":540110728157,"id":15,"parentId":1,"tags":{},"startTime":1779348082974,"traceId":"287f280b1a988944"},{"name":"run-typescript","duration":12308077,"timestamp":540119562412,"id":16,"parentId":1,"tags":{},"startTime":1779348091809,"traceId":"287f280b1a988944"},{"name":"generate-required-server-files","duration":3086,"timestamp":540131871705,"id":18,"parentId":1,"tags":{},"startTime":1779348104118,"traceId":"287f280b1a988944"},{"name":"check-static-error-page","duration":17179,"timestamp":540132121499,"id":20,"parentId":19,"tags":{},"startTime":1779348104368,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":902806,"timestamp":540132142830,"id":65,"parentId":22,"tags":{},"startTime":1779348104389,"traceId":"287f280b1a988944"},{"name":"check-page","duration":921014,"timestamp":540132124810,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779348104371,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":933104,"timestamp":540132144059,"id":69,"parentId":28,"tags":{},"startTime":1779348104390,"traceId":"287f280b1a988944"},{"name":"check-page","duration":947654,"timestamp":540132129622,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":937949,"timestamp":540132144778,"id":72,"parentId":32,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":952660,"timestamp":540132130143,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":984043,"timestamp":540132144573,"id":70,"parentId":29,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":998974,"timestamp":540132129717,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":988939,"timestamp":540132145013,"id":74,"parentId":34,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1003737,"timestamp":540132130342,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1015241,"timestamp":540132142967,"id":66,"parentId":25,"tags":{},"startTime":1779348104389,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1029008,"timestamp":540132129285,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1013567,"timestamp":540132145041,"id":75,"parentId":35,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1028219,"timestamp":540132130425,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1013848,"timestamp":540132144927,"id":73,"parentId":33,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1028549,"timestamp":540132130249,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1031833,"timestamp":540132142451,"id":64,"parentId":21,"tags":{},"startTime":1779348104389,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1051157,"timestamp":540132123199,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779348104369,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1031446,"timestamp":540132143094,"id":67,"parentId":26,"tags":{},"startTime":1779348104389,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1045155,"timestamp":540132129421,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1047091,"timestamp":540132144727,"id":71,"parentId":30,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1062077,"timestamp":540132129817,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1052281,"timestamp":540132145101,"id":78,"parentId":38,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1066475,"timestamp":540132130966,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1065520,"timestamp":540132145124,"id":80,"parentId":40,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1079576,"timestamp":540132131131,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1067816,"timestamp":540132145151,"id":82,"parentId":44,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1080605,"timestamp":540132132424,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779348104379,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1068125,"timestamp":540132145055,"id":76,"parentId":36,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1082443,"timestamp":540132130767,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1072936,"timestamp":540132145162,"id":83,"parentId":45,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1085561,"timestamp":540132132585,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779348104379,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1080598,"timestamp":540132145191,"id":85,"parentId":47,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1090955,"timestamp":540132134906,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779348104381,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1085039,"timestamp":540132145177,"id":84,"parentId":46,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1095550,"timestamp":540132134725,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779348104381,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1085202,"timestamp":540132145200,"id":86,"parentId":48,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1095375,"timestamp":540132135054,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779348104381,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1095373,"timestamp":540132145081,"id":77,"parentId":37,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1109624,"timestamp":540132130876,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1097132,"timestamp":540132145239,"id":89,"parentId":51,"tags":{},"startTime":1779348104392,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1106972,"timestamp":540132135447,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779348104382,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1099673,"timestamp":540132145227,"id":88,"parentId":50,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1109617,"timestamp":540132135327,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779348104382,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1100935,"timestamp":540132150879,"id":91,"parentId":31,"tags":{},"startTime":1779348104397,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1121971,"timestamp":540132129897,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1109526,"timestamp":540132151717,"id":92,"parentId":41,"tags":{},"startTime":1779348104398,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1130144,"timestamp":540132131194,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1114862,"timestamp":540132149671,"id":90,"parentId":24,"tags":{},"startTime":1779348104396,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1139080,"timestamp":540132125500,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779348104372,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1111916,"timestamp":540132152800,"id":93,"parentId":43,"tags":{},"startTime":1779348104399,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1133264,"timestamp":540132131482,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779348104378,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1121582,"timestamp":540132145214,"id":87,"parentId":49,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1131651,"timestamp":540132135194,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779348104381,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1132625,"timestamp":540132145138,"id":81,"parentId":42,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1146430,"timestamp":540132131391,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779348104378,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1149289,"timestamp":540132145111,"id":79,"parentId":39,"tags":{},"startTime":1779348104391,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1163397,"timestamp":540132131059,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779348104377,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1155349,"timestamp":540132143547,"id":68,"parentId":27,"tags":{},"startTime":1779348104390,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1169453,"timestamp":540132129505,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779348104376,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1147677,"timestamp":540132155084,"id":99,"parentId":56,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1166324,"timestamp":540132136491,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779348104383,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1155504,"timestamp":540132155220,"id":101,"parentId":59,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1173294,"timestamp":540132137481,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779348104384,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1162951,"timestamp":540132155238,"id":102,"parentId":61,"tags":{},"startTime":1779348104402,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1180177,"timestamp":540132138099,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779348104384,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1180832,"timestamp":540132155252,"id":103,"parentId":62,"tags":{},"startTime":1779348104402,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1197886,"timestamp":540132138255,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779348104385,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1185841,"timestamp":540132155279,"id":104,"parentId":63,"tags":{},"startTime":1779348104402,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1202743,"timestamp":540132138434,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779348104385,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1190649,"timestamp":540132155075,"id":98,"parentId":55,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1209490,"timestamp":540132136294,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779348104383,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1185059,"timestamp":540132163308,"id":105,"parentId":60,"tags":{},"startTime":1779348104410,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1210756,"timestamp":540132137655,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779348104384,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1203677,"timestamp":540132155048,"id":96,"parentId":53,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1222834,"timestamp":540132135940,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779348104382,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1218054,"timestamp":540132155062,"id":97,"parentId":54,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1237075,"timestamp":540132136097,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779348104382,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1198864,"timestamp":540132176425,"id":106,"parentId":57,"tags":{},"startTime":1779348104423,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1238627,"timestamp":540132136714,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779348104383,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1226266,"timestamp":540132155032,"id":95,"parentId":52,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1245549,"timestamp":540132135800,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779348104382,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1246790,"timestamp":540132154986,"id":94,"parentId":23,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1276629,"timestamp":540132125219,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779348104371,"traceId":"287f280b1a988944"},{"name":"is-page-static","duration":1247398,"timestamp":540132155097,"id":100,"parentId":58,"tags":{},"startTime":1779348104401,"traceId":"287f280b1a988944"},{"name":"check-page","duration":1265287,"timestamp":540132137258,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779348104384,"traceId":"287f280b1a988944"},{"name":"static-check","duration":1282288,"timestamp":540132120309,"id":19,"parentId":1,"tags":{},"startTime":1779348104367,"traceId":"287f280b1a988944"}]
2
- [{"name":"write-routes-manifest","duration":605,"timestamp":540133413041,"id":108,"parentId":1,"tags":{},"startTime":1779348105659,"traceId":"287f280b1a988944"},{"name":"load-dotenv","duration":62,"timestamp":540133427289,"id":111,"parentId":110,"tags":{},"startTime":1779348105674,"traceId":"287f280b1a988944"},{"name":"run-export-path-map","duration":1159,"timestamp":540133430398,"id":112,"parentId":110,"tags":{},"startTime":1779348105677,"traceId":"287f280b1a988944"},{"name":"next-export","duration":710628,"timestamp":540133425814,"id":110,"parentId":1,"tags":{},"startTime":1779348105672,"traceId":"287f280b1a988944"},{"name":"move-exported-app-not-found-","duration":610,"timestamp":540134139950,"id":113,"parentId":109,"tags":{},"startTime":1779348106386,"traceId":"287f280b1a988944"},{"name":"move-exported-app-global-error-","duration":557,"timestamp":540134140669,"id":114,"parentId":109,"tags":{},"startTime":1779348106387,"traceId":"287f280b1a988944"},{"name":"static-generation","duration":725545,"timestamp":540133418186,"id":109,"parentId":1,"tags":{},"startTime":1779348105664,"traceId":"287f280b1a988944"},{"name":"write-routes-manifest","duration":596,"timestamp":540134143937,"id":115,"parentId":1,"tags":{},"startTime":1779348106390,"traceId":"287f280b1a988944"},{"name":"print-tree-view","duration":5130,"timestamp":540134164260,"id":116,"parentId":1,"tags":{},"startTime":1779348106411,"traceId":"287f280b1a988944"},{"name":"write-route-bundle-stats","duration":14095,"timestamp":540134169437,"id":117,"parentId":1,"tags":{},"startTime":1779348106416,"traceId":"287f280b1a988944"},{"name":"telemetry-flush","duration":46985,"timestamp":540134183566,"id":118,"parentId":1,"tags":{},"startTime":1779348106430,"traceId":"287f280b1a988944"},{"name":"next-build","duration":24157300,"timestamp":540110073293,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779348082320,"traceId":"287f280b1a988944"}]
1
+ [{"name":"generate-buildid","duration":282,"timestamp":542327774076,"id":4,"parentId":1,"tags":{},"startTime":1779350300020,"traceId":"0b5ecfab86f3222c"},{"name":"load-custom-routes","duration":714,"timestamp":542327774506,"id":5,"parentId":1,"tags":{},"startTime":1779350300021,"traceId":"0b5ecfab86f3222c"},{"name":"create-dist-dir","duration":803,"timestamp":542327775278,"id":6,"parentId":1,"tags":{},"startTime":1779350300022,"traceId":"0b5ecfab86f3222c"},{"name":"clean","duration":41063,"timestamp":542327776848,"id":7,"parentId":1,"tags":{},"startTime":1779350300023,"traceId":"0b5ecfab86f3222c"},{"name":"discover-routes","duration":11281,"timestamp":542327914967,"id":8,"parentId":1,"tags":{},"startTime":1779350300161,"traceId":"0b5ecfab86f3222c"},{"name":"create-root-mapping","duration":166,"timestamp":542327926327,"id":9,"parentId":1,"tags":{},"startTime":1779350300173,"traceId":"0b5ecfab86f3222c"},{"name":"generate-route-types","duration":20469,"timestamp":542327929598,"id":10,"parentId":1,"tags":{},"startTime":1779350300176,"traceId":"0b5ecfab86f3222c"},{"name":"public-dir-conflict-check","duration":100,"timestamp":542327950151,"id":11,"parentId":1,"tags":{},"startTime":1779350300196,"traceId":"0b5ecfab86f3222c"},{"name":"generate-routes-manifest","duration":5356,"timestamp":542327950358,"id":12,"parentId":1,"tags":{},"startTime":1779350300197,"traceId":"0b5ecfab86f3222c"},{"name":"run-turbopack","duration":8252546,"timestamp":542327975114,"id":14,"parentId":1,"tags":{},"startTime":1779350300221,"traceId":"0b5ecfab86f3222c"},{"name":"turbopack-build-events","duration":107,"timestamp":542328339340,"id":15,"parentId":1,"tags":{},"startTime":1779350300586,"traceId":"0b5ecfab86f3222c"},{"name":"run-typescript","duration":12026708,"timestamp":542336239812,"id":16,"parentId":1,"tags":{},"startTime":1779350308486,"traceId":"0b5ecfab86f3222c"},{"name":"generate-required-server-files","duration":4207,"timestamp":542348269197,"id":18,"parentId":1,"tags":{},"startTime":1779350320515,"traceId":"0b5ecfab86f3222c"},{"name":"check-static-error-page","duration":26862,"timestamp":542348655838,"id":20,"parentId":19,"tags":{},"startTime":1779350320902,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":979104,"timestamp":542348691232,"id":69,"parentId":28,"tags":{},"startTime":1779350320938,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1001388,"timestamp":542348669143,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779350320915,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":979067,"timestamp":542348697484,"id":71,"parentId":30,"tags":{},"startTime":1779350320944,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1007220,"timestamp":542348669430,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779350320916,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1065773,"timestamp":542348697692,"id":72,"parentId":32,"tags":{},"startTime":1779350320944,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1093736,"timestamp":542348669825,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779350320916,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1079795,"timestamp":542348697966,"id":73,"parentId":33,"tags":{},"startTime":1779350320944,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1107889,"timestamp":542348669969,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779350320916,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1089237,"timestamp":542348698119,"id":74,"parentId":34,"tags":{},"startTime":1779350320944,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1117302,"timestamp":542348670139,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779350320916,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1098035,"timestamp":542348698159,"id":75,"parentId":35,"tags":{},"startTime":1779350320944,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1125990,"timestamp":542348670283,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779350320917,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1106836,"timestamp":542348698229,"id":76,"parentId":36,"tags":{},"startTime":1779350320945,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1134377,"timestamp":542348670794,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779350320917,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1116596,"timestamp":542348698271,"id":77,"parentId":37,"tags":{},"startTime":1779350320945,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1143955,"timestamp":542348670983,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779350320917,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1125050,"timestamp":542348698561,"id":78,"parentId":38,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1150959,"timestamp":542348672728,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779350320919,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1137228,"timestamp":542348699563,"id":79,"parentId":39,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1163960,"timestamp":542348672907,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779350320919,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1155550,"timestamp":542348699586,"id":80,"parentId":40,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1182135,"timestamp":542348673094,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779350320919,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1174306,"timestamp":542348699600,"id":81,"parentId":42,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1200481,"timestamp":542348673573,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779350320920,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1193370,"timestamp":542348699618,"id":82,"parentId":44,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1219094,"timestamp":542348674030,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779350320920,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1215621,"timestamp":542348691132,"id":68,"parentId":27,"tags":{},"startTime":1779350320937,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1237865,"timestamp":542348668969,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779350320915,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1210457,"timestamp":542348699636,"id":83,"parentId":45,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1236006,"timestamp":542348674163,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779350320920,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1223648,"timestamp":542348699665,"id":85,"parentId":47,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1249005,"timestamp":542348674386,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779350320921,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1240366,"timestamp":542348699682,"id":86,"parentId":48,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1265634,"timestamp":542348674511,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779350320921,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1254131,"timestamp":542348699698,"id":87,"parentId":49,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1275275,"timestamp":542348678671,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779350320925,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1281319,"timestamp":542348699710,"id":88,"parentId":50,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1302283,"timestamp":542348678836,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779350320925,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1317842,"timestamp":542348699727,"id":89,"parentId":51,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1338693,"timestamp":542348678966,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779350320925,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1334894,"timestamp":542348699648,"id":84,"parentId":46,"tags":{},"startTime":1779350320946,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1360356,"timestamp":542348674268,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779350320921,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1360806,"timestamp":542348690869,"id":66,"parentId":25,"tags":{},"startTime":1779350320937,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1383138,"timestamp":542348668625,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779350320915,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1352853,"timestamp":542348703802,"id":90,"parentId":24,"tags":{},"startTime":1779350320950,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1392317,"timestamp":542348664407,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779350320911,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1366328,"timestamp":542348707185,"id":93,"parentId":43,"tags":{},"startTime":1779350320953,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1399870,"timestamp":542348673714,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779350320920,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1407739,"timestamp":542348706085,"id":92,"parentId":41,"tags":{},"startTime":1779350320952,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1440693,"timestamp":542348673211,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779350320919,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1424491,"timestamp":542348705186,"id":91,"parentId":31,"tags":{},"startTime":1779350320951,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1460394,"timestamp":542348669541,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779350320916,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1483247,"timestamp":542348690983,"id":67,"parentId":26,"tags":{},"startTime":1779350320937,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1505499,"timestamp":542348668815,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779350320915,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1585476,"timestamp":542348719724,"id":95,"parentId":52,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1625877,"timestamp":542348679408,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779350320926,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1627998,"timestamp":542348688818,"id":64,"parentId":21,"tags":{},"startTime":1779350320935,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1656665,"timestamp":542348660231,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779350320907,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1611059,"timestamp":542348719743,"id":96,"parentId":53,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1651333,"timestamp":542348679550,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779350320926,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1648684,"timestamp":542348690721,"id":65,"parentId":22,"tags":{},"startTime":1779350320937,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1676090,"timestamp":542348663393,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779350320910,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1632483,"timestamp":542348719808,"id":100,"parentId":58,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1671304,"timestamp":542348681058,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779350320927,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1632758,"timestamp":542348719776,"id":98,"parentId":55,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1672691,"timestamp":542348679891,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779350320926,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1652548,"timestamp":542348719788,"id":99,"parentId":56,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1692234,"timestamp":542348680166,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779350320926,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1652603,"timestamp":542348719967,"id":102,"parentId":61,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1690538,"timestamp":542348682076,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779350320928,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1655177,"timestamp":542348719686,"id":94,"parentId":23,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1711030,"timestamp":542348663874,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779350320910,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1655215,"timestamp":542348719760,"id":97,"parentId":54,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1695310,"timestamp":542348679687,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779350320926,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1655111,"timestamp":542348719983,"id":103,"parentId":62,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1692863,"timestamp":542348682260,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779350320929,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1668119,"timestamp":542348720028,"id":104,"parentId":63,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1705780,"timestamp":542348682428,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779350320929,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1665579,"timestamp":542348732729,"id":106,"parentId":57,"tags":{},"startTime":1779350320979,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1717926,"timestamp":542348680444,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779350320927,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1680514,"timestamp":542348720045,"id":105,"parentId":60,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1719147,"timestamp":542348681464,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779350320928,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1774306,"timestamp":542348719947,"id":101,"parentId":59,"tags":{},"startTime":1779350320966,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1813068,"timestamp":542348681277,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779350320928,"traceId":"0b5ecfab86f3222c"},{"name":"is-page-static","duration":1874602,"timestamp":542348697215,"id":70,"parentId":29,"tags":{},"startTime":1779350320943,"traceId":"0b5ecfab86f3222c"},{"name":"check-page","duration":1902600,"timestamp":542348669284,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779350320916,"traceId":"0b5ecfab86f3222c"},{"name":"static-check","duration":1917767,"timestamp":542348654161,"id":19,"parentId":1,"tags":{},"startTime":1779350320900,"traceId":"0b5ecfab86f3222c"}]
2
+ [{"name":"write-routes-manifest","duration":982,"timestamp":542350594499,"id":108,"parentId":1,"tags":{},"startTime":1779350322841,"traceId":"0b5ecfab86f3222c"},{"name":"load-dotenv","duration":76,"timestamp":542350622465,"id":111,"parentId":110,"tags":{},"startTime":1779350322869,"traceId":"0b5ecfab86f3222c"},{"name":"run-export-path-map","duration":853,"timestamp":542350625674,"id":112,"parentId":110,"tags":{},"startTime":1779350322872,"traceId":"0b5ecfab86f3222c"},{"name":"next-export","duration":698941,"timestamp":542350619985,"id":110,"parentId":1,"tags":{},"startTime":1779350322866,"traceId":"0b5ecfab86f3222c"},{"name":"move-exported-app-not-found-","duration":578,"timestamp":542351322850,"id":113,"parentId":109,"tags":{},"startTime":1779350323569,"traceId":"0b5ecfab86f3222c"},{"name":"move-exported-app-global-error-","duration":490,"timestamp":542351323556,"id":114,"parentId":109,"tags":{},"startTime":1779350323570,"traceId":"0b5ecfab86f3222c"},{"name":"static-generation","duration":724783,"timestamp":542350601759,"id":109,"parentId":1,"tags":{},"startTime":1779350322848,"traceId":"0b5ecfab86f3222c"},{"name":"write-routes-manifest","duration":673,"timestamp":542351326871,"id":115,"parentId":1,"tags":{},"startTime":1779350323573,"traceId":"0b5ecfab86f3222c"},{"name":"print-tree-view","duration":5182,"timestamp":542351343797,"id":116,"parentId":1,"tags":{},"startTime":1779350323590,"traceId":"0b5ecfab86f3222c"},{"name":"write-route-bundle-stats","duration":17653,"timestamp":542351349581,"id":117,"parentId":1,"tags":{},"startTime":1779350323596,"traceId":"0b5ecfab86f3222c"},{"name":"telemetry-flush","duration":25054,"timestamp":542351367268,"id":118,"parentId":1,"tags":{},"startTime":1779350323614,"traceId":"0b5ecfab86f3222c"},{"name":"next-build","duration":23674177,"timestamp":542327718177,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779350299964,"traceId":"0b5ecfab86f3222c"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":9231797,"timestamp":540110320085,"id":14,"parentId":1,"tags":{},"startTime":1779348082566,"traceId":"287f280b1a988944"},{"name":"turbopack-build-events","duration":134,"timestamp":540110728157,"id":15,"parentId":1,"tags":{},"startTime":1779348082974,"traceId":"287f280b1a988944"},{"name":"run-typescript","duration":12308077,"timestamp":540119562412,"id":16,"parentId":1,"tags":{},"startTime":1779348091809,"traceId":"287f280b1a988944"},{"name":"static-check","duration":1282288,"timestamp":540132120309,"id":19,"parentId":1,"tags":{},"startTime":1779348104367,"traceId":"287f280b1a988944"},{"name":"static-generation","duration":725545,"timestamp":540133418186,"id":109,"parentId":1,"tags":{},"startTime":1779348105664,"traceId":"287f280b1a988944"},{"name":"telemetry-flush","duration":46985,"timestamp":540134183566,"id":118,"parentId":1,"tags":{},"startTime":1779348106430,"traceId":"287f280b1a988944"},{"name":"next-build","duration":24157300,"timestamp":540110073293,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779348082320,"traceId":"287f280b1a988944"}]
1
+ [{"name":"run-turbopack","duration":8252546,"timestamp":542327975114,"id":14,"parentId":1,"tags":{},"startTime":1779350300221,"traceId":"0b5ecfab86f3222c"},{"name":"turbopack-build-events","duration":107,"timestamp":542328339340,"id":15,"parentId":1,"tags":{},"startTime":1779350300586,"traceId":"0b5ecfab86f3222c"},{"name":"run-typescript","duration":12026708,"timestamp":542336239812,"id":16,"parentId":1,"tags":{},"startTime":1779350308486,"traceId":"0b5ecfab86f3222c"},{"name":"static-check","duration":1917767,"timestamp":542348654161,"id":19,"parentId":1,"tags":{},"startTime":1779350320900,"traceId":"0b5ecfab86f3222c"},{"name":"static-generation","duration":724783,"timestamp":542350601759,"id":109,"parentId":1,"tags":{},"startTime":1779350322848,"traceId":"0b5ecfab86f3222c"},{"name":"telemetry-flush","duration":25054,"timestamp":542351367268,"id":118,"parentId":1,"tags":{},"startTime":1779350323614,"traceId":"0b5ecfab86f3222c"},{"name":"next-build","duration":23674177,"timestamp":542327718177,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779350299964,"traceId":"0b5ecfab86f3222c"}]
@@ -1024,180 +1024,130 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
1024
1024
  return { key, lead, deputy, members: others };
1025
1025
  });
1026
1026
 
1027
- // ---- box-based org layout (Vincent #170 feedback) ----------------
1028
- // Each team is a rectangular BOX (reusing the grid-mode cluster-box
1029
- // visual via groupBoxes); its members pack into a compact ~√n grid
1030
- // INSIDE the box rather than one wide row an 8-person team is a
1031
- // ~3×3 block, not a 1×8 strip. Boxes sit side-by-side at layer 2;
1032
- // 副指挥 (layer 1) centre over their contiguous box-run; the root
1033
- // (layer 0) centres over the 副指挥. Keeps the whole chart compact
1034
- // and screenshot-friendly even at dozens of nodes.
1027
+ // ---- swimlane org layout (Vincent dispatch: "一行一个团队,成员
1028
+ // 不换行,最左边放总指挥和副指挥") ------------------------------------
1029
+ // Each team is ONE horizontal lane a wide box whose members sit in
1030
+ // a single NON-WRAPPING row. Lanes stack top-to-bottom (one team per
1031
+ // row). The command layer (总指挥 + 副指挥) is pinned in its own box
1032
+ // down the left edge. Reverses the iter1–3 2D box-grid; the iter5
1033
+ // treeContentBox auto-fit still scales + centres the whole chart.
1035
1034
  const nodeR = Math.round(26 * nodeScale);
1036
- const cellW = Math.max(108, 2 * nodeR + 56); // member grid cell fits a label card
1037
- const cellH = Math.max(96, 2 * nodeR + 48); // + label drop room below the node
1038
- const BOX_PAD = 16; // box inner padding
1035
+ const cellW = Math.max(118, 2 * nodeR + 66); // member slotnode + dense label
1039
1036
  const BOX_LABEL = 26; // box top label band
1040
- const BOX_GAP = 48; // gap between sibling boxes
1041
- // iter5 (Vincent UX tree presentation): the two header layers
1042
- // (总指挥 / 副指挥) hold single small nodes; the iter-2 ROW=116 gap
1043
- // gave them ~362px of pure header before the first team box. HEAD_ROW
1044
- // tightens those two layer gaps still clears node radius + label
1045
- // drop + connector elbow (needs >72px; 88 leaves a safe margin) but
1046
- // trims header bloat so the box-layout auto-fit lands at a larger
1047
- // zoom. The team-box rows below keep their own spacing untouched.
1048
- const HEAD_ROW = Math.max(88, nodeR + 62); // header layer gap (iter5)
1049
- const TOP = 130; // y of layer-0 root (clears corner panels)
1050
- const LEFT = 70;
1051
-
1052
- // a "box unit" = a team (or the 未分组 bucket) drawn as a grid box.
1053
- type BoxUnit = {
1054
- key: string; isOrphan: boolean;
1055
- members: Session[]; // grid order: lead, deputy, …
1056
- cols: number; rows: number; w: number; h: number;
1057
- x: number; y: number; // top-left, filled below
1058
- };
1059
- const mkBox = (key: string, isOrphan: boolean, members: Session[]): BoxUnit => {
1060
- const n = Math.max(1, members.length);
1061
- const cols = Math.ceil(Math.sqrt(n));
1062
- const rows = Math.ceil(n / cols);
1063
- return {
1064
- key, isOrphan, members, cols, rows,
1065
- w: cols * cellW + 2 * BOX_PAD,
1066
- h: rows * cellH + 2 * BOX_PAD + BOX_LABEL,
1067
- x: 0, y: 0,
1068
- };
1069
- };
1070
- const boxes: BoxUnit[] = teamTrees.map(tt =>
1071
- mkBox(tt.key, false, [tt.lead, ...(tt.deputy ? [tt.deputy] : []), ...tt.members]));
1072
- // orphan bucket — every underivable agent in its own 未分组 box so
1073
- // none are ever dropped from the chart.
1037
+ const LANE_BODY = Math.max(82, 2 * nodeR + 36);// member-row band height
1038
+ const LANE_H = BOX_LABEL + LANE_BODY; // full lane box height
1039
+ const LANE_GAP = 16; // vertical gap between lanes
1040
+ const BOX_PAD = 14; // lane inner side padding
1041
+ const CMD_W = Math.max(150, 2 * nodeR + 100); // command column width
1042
+ const CMD_GAP = 44; // gap: command column lanes
1043
+ const CMD_SLOT = Math.max(116, 2 * nodeR + 64);// command node vertical pitch
1044
+ const TOP = 92;
1045
+ const LEFT = 44;
1046
+ const laneX0 = LEFT + CMD_W + CMD_GAP; // x where team lanes start
1047
+
1048
+ // ordered lanes: one per team (teamTrees is already alias-sorted) +
1049
+ // a trailing 未分组 lane collecting every orphan so none are dropped.
1050
+ type Lane = { key: string; isOrphan: boolean; members: Session[] };
1051
+ const lanes: Lane[] = teamTrees.map(tt => ({
1052
+ key: tt.key, isOrphan: false,
1053
+ members: [tt.lead, ...(tt.deputy ? [tt.deputy] : []), ...tt.members],
1054
+ }));
1074
1055
  if (orphans.length > 0) {
1075
- boxes.push(mkBox('未分组', true,
1076
- [...orphans].sort((a, b) => a.alias.localeCompare(b.alias))));
1056
+ lanes.push({
1057
+ key: '未分组', isOrphan: true,
1058
+ members: [...orphans].sort((a, b) => a.alias.localeCompare(b.alias)),
1059
+ });
1077
1060
  }
1078
1061
 
1079
- // lay boxes into a 2D wrapped grid (Vincent iter 3: team boxes need
1080
- // not sit in one long row — wrap into rows so the chart stays
1081
- // compact / screenshot-friendly even with many teams).
1082
- const layer2Y = TOP + 2 * HEAD_ROW;
1083
- const BOX_ROW_GAP = 40; // vertical gap between box rows
1084
- const ROW_W_TARGET = 1240; // wrap once a row would exceed this
1085
- let rowX = LEFT, rowY = layer2Y, rowMaxH = 0, rowCount = 0;
1086
- let lastRowBottom = layer2Y;
1087
- for (const b of boxes) {
1088
- if (rowCount > 0 && rowX + b.w > LEFT + ROW_W_TARGET) {
1089
- rowY += rowMaxH + BOX_ROW_GAP; // wrap to next box row
1090
- rowX = LEFT; rowMaxH = 0; rowCount = 0;
1091
- }
1092
- b.x = rowX; b.y = rowY;
1093
- rowX += b.w + BOX_GAP;
1094
- rowMaxH = Math.max(rowMaxH, b.h);
1095
- rowCount++;
1096
- lastRowBottom = rowY + rowMaxH;
1097
- }
1098
- // member positions — compact grid inside each box.
1099
- for (const b of boxes) {
1100
- b.members.forEach((s, i) => {
1101
- const col = i % b.cols;
1102
- const row = Math.floor(i / b.cols);
1062
+ // each lane = a wide box; its members in a single row inside it.
1063
+ const laneStep = LANE_H + LANE_GAP;
1064
+ const laneBoxes = lanes.map((lane, i) => {
1065
+ const y = TOP + i * laneStep;
1066
+ const w = 2 * BOX_PAD + Math.max(1, lane.members.length) * cellW;
1067
+ lane.members.forEach((s, j) => {
1103
1068
  positions[s.alias] = {
1104
- x: b.x + BOX_PAD + (col + 0.5) * cellW,
1105
- y: b.y + BOX_LABEL + BOX_PAD + (row + 0.5) * cellH,
1069
+ x: laneX0 + BOX_PAD + (j + 0.5) * cellW,
1070
+ y: y + BOX_LABEL + LANE_BODY / 2,
1106
1071
  };
1107
1072
  });
1108
- }
1109
- const boxCentreX = (b: BoxUnit) => b.x + b.w / 2;
1110
-
1111
- // layer 1: 副指挥, each centred over a contiguous run of boxes.
1112
- const layer1Y = TOP + HEAD_ROW;
1113
- const depNodes: { alias: string; x: number; y: number }[] = [];
1114
- const depPer = deputyCommanders.length > 0
1115
- ? Math.ceil(Math.max(boxes.length, 1) / deputyCommanders.length)
1116
- : 0;
1117
- deputyCommanders.forEach((s, di) => {
1118
- const run = boxes.slice(di * depPer, di * depPer + depPer);
1119
- const xs = run.length ? run.map(boxCentreX)
1120
- : [LEFT + di * (cellW + BOX_GAP) + cellW / 2];
1121
- const x = (Math.min(...xs) + Math.max(...xs)) / 2;
1122
- depNodes.push({ alias: s.alias, x, y: layer1Y });
1123
- positions[s.alias] = { x, y: layer1Y };
1073
+ return { lane, x: laneX0, y, w, h: LANE_H };
1124
1074
  });
1125
-
1126
- // layer 0: root single 总指挥, else a synthetic 指挥中心.
1127
- const anchorXs = depNodes.length > 0 ? depNodes.map(d => d.x)
1128
- : boxes.length > 0 ? boxes.map(boxCentreX)
1129
- : [LEFT + cellW / 2];
1130
- const rootX = (Math.min(...anchorXs) + Math.max(...anchorXs)) / 2;
1131
- let synthRoot = false;
1132
- if (commanders.length === 1) {
1133
- positions[commanders[0].alias] = { x: rootX, y: TOP };
1134
- } else {
1135
- synthRoot = true;
1136
- // any 总指挥 (0, or >1) spread along layer 0 beside the synth anchor
1137
- commanders.forEach((c, ci) => {
1138
- positions[c.alias] = {
1139
- x: rootX + (ci - (commanders.length - 1) / 2) * (cellW + 28),
1140
- y: TOP,
1075
+ const laneBlockH = lanes.length ? lanes.length * laneStep - LANE_GAP : LANE_H;
1076
+ const laneBlockBottom = TOP + laneBlockH;
1077
+
1078
+ // command column 总指挥 + 副指挥 stacked in a compact box pinned to
1079
+ // the far left, vertically centred against the lane block.
1080
+ const cmdMembers: Session[] = [...commanders, ...deputyCommanders];
1081
+ const cmdX = LEFT + CMD_W / 2;
1082
+ const cmdH = cmdMembers.length > 0 ? BOX_LABEL + cmdMembers.length * CMD_SLOT : 0;
1083
+ const cmdBox = cmdMembers.length > 0
1084
+ ? { x: LEFT, y: TOP + Math.max(0, (laneBlockH - cmdH) / 2), w: CMD_W, h: cmdH }
1085
+ : null;
1086
+ if (cmdBox) {
1087
+ cmdMembers.forEach((s, i) => {
1088
+ positions[s.alias] = {
1089
+ x: cmdX,
1090
+ y: cmdBox.y + BOX_LABEL + (i + 0.5) * CMD_SLOT,
1141
1091
  };
1142
1092
  });
1143
1093
  }
1144
1094
 
1145
- // elbow connectors: root 副指挥 team-box top edge (render draws
1146
- // the right-angle path behind the nodes).
1095
+ // org link: a light connector from the command column to each lane.
1147
1096
  const connectors: TreeConnectorLine[] = [];
1148
- for (const d of depNodes) {
1149
- connectors.push({ x1: rootX, y1: TOP, x2: d.x, y2: d.y });
1150
- }
1151
- boxes.forEach((b, bi) => {
1152
- let px = rootX, py = TOP;
1153
- if (depNodes.length > 0) {
1154
- const di = Math.min(depNodes.length - 1, Math.floor(bi / Math.max(depPer, 1)));
1155
- px = depNodes[di].x; py = depNodes[di].y;
1097
+ if (cmdBox) {
1098
+ const cmdRight = cmdBox.x + cmdBox.w;
1099
+ const cmdMidY = cmdBox.y + cmdBox.h / 2;
1100
+ for (const lb of laneBoxes) {
1101
+ connectors.push({ x1: cmdRight, y1: cmdMidY, x2: lb.x, y2: lb.y + LANE_H / 2 });
1156
1102
  }
1157
- connectors.push({ x1: px, y1: py, x2: boxCentreX(b), y2: b.y });
1158
- });
1103
+ }
1159
1104
 
1160
- // synthetic root label (only when there is no single 总指挥)
1161
- const synthBoxes = synthRoot ? [{ x: rootX, y: TOP, label: '指挥中心' }] : [];
1105
+ // swimlane has no synthetic root chip the command box (labelled
1106
+ // 指挥中心 when there is no single 总指挥) is the command layer.
1107
+ const synthRoot = false;
1108
+ const synthBoxes: { x: number; y: number; label: string }[] = [];
1162
1109
 
1163
- // team boxes surfaced as groupBoxes — reuses the grid-mode cluster
1110
+ // lanes + command column surfaced as groupBoxes — reuses the cluster
1164
1111
  // box render + per-box working/idle/offline pip strip.
1165
- const teamGroupBoxes = boxes.map(b => {
1112
+ const tally = (members: Session[]) => {
1166
1113
  let w = 0, i = 0, o = 0;
1167
- for (const s of b.members) {
1114
+ for (const s of members) {
1168
1115
  const isOn = s.status !== 'offline' || !!sseCount(s);
1169
1116
  if (s.status === 'working') w++;
1170
1117
  else if (isOn) i++;
1171
1118
  else o++;
1172
1119
  }
1173
- return {
1174
- key: b.key, isOrphan: b.isOrphan, count: b.members.length,
1175
- statuses: { working: w, idle: i, offline: o },
1176
- x: b.x, y: b.y, w: b.w, h: b.h,
1177
- };
1178
- });
1179
-
1180
- // tree mode is a clean org chart (Vincent iter 4): message flow-links
1181
- // between nodes in different team boxes tangle as long curves across
1182
- // the hierarchy and bury the structure. Suppress them in tree — the
1183
- // right-angle report connectors (treeConnectors) carry the org lines.
1184
-
1185
- // content bottom for auto-fit zoom — bottom of the LAST box row.
1186
- // Boxes wrap into multiple rows (iter 3), so this must track the
1187
- // wrapped lastRowBottom, not layer2Y + tallest-box.
1188
- const treeBottom = boxes.length ? lastRowBottom : TOP + HEAD_ROW;
1120
+ return { working: w, idle: i, offline: o };
1121
+ };
1122
+ const teamGroupBoxes = [
1123
+ ...(cmdBox ? [{
1124
+ key: commanders.length === 1 ? commanders[0].alias : '指挥中心',
1125
+ isOrphan: false, count: cmdMembers.length,
1126
+ statuses: tally(cmdMembers),
1127
+ x: cmdBox.x, y: cmdBox.y, w: cmdBox.w, h: cmdBox.h,
1128
+ }] : []),
1129
+ ...laneBoxes.map(lb => ({
1130
+ key: lb.lane.key, isOrphan: lb.lane.isOrphan,
1131
+ count: lb.lane.members.length,
1132
+ statuses: tally(lb.lane.members),
1133
+ x: lb.x, y: lb.y, w: lb.w, h: lb.h,
1134
+ })),
1135
+ ];
1136
+
1137
+ // content bottom for auto-fit — bottom of the lowest box.
1138
+ const treeBottom = Math.max(
1139
+ laneBlockBottom,
1140
+ cmdBox ? cmdBox.y + cmdBox.h : TOP + LANE_H,
1141
+ );
1189
1142
  const gridContentBottom = treeBottom + 48;
1190
1143
 
1191
- // iter5 (Vincent UX): full content bounding box over every team box
1192
- // + every node. The auto-fit effect uses this to scale the org chart
1193
- // to fit BOTH viewBox dimensions AND centre it. Pre-iter5 auto-fit
1194
- // only fit height and left-anchored the chart (LEFT=70), so the tree
1195
- // hugged the top-left corner with dead canvas down the right side.
1144
+ // iter5 (Vincent UX): full content bounding box the auto-fit effect
1145
+ // scales the chart to fit BOTH viewBox dimensions AND centres it.
1196
1146
  const treeBX: number[] = [], treeBY: number[] = [];
1197
- for (const b of boxes) { treeBX.push(b.x, b.x + b.w); treeBY.push(b.y, b.y + b.h); }
1147
+ for (const gb of teamGroupBoxes) { treeBX.push(gb.x, gb.x + gb.w); treeBY.push(gb.y, gb.y + gb.h); }
1198
1148
  for (const a of Object.keys(positions)) { treeBX.push(positions[a].x); treeBY.push(positions[a].y); }
1199
1149
  // TREE_M pads the raw box/node extent so node radii + label drops
1200
- // (root/副指挥 sit above the boxes) never clip at the fitted edge.
1150
+ // never clip at the fitted edge.
1201
1151
  const TREE_M = 52;
1202
1152
  const treeContentBox: { x: number; y: number; w: number; h: number } | null = treeBX.length
1203
1153
  ? {
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.261",
4
- "description": "Agent Network Dashboard Web UI for managing AI Agent networks",
3
+ "version": "0.5.3-preview.262",
4
+ "description": "Agent Network Dashboard \u2014 Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
7
7
  "build": "next build",
8
8
  "start": "next start",
9
9
  "lint": "eslint",
10
- "prepublishOnly": "[ -f .next/BUILD_ID ] || (echo 'prepublishOnly: .next/BUILD_ID missing run npm run build first (see commit 05c1ebf body for R224 chunk-500 root cause)' >&2 && exit 1)"
10
+ "prepublishOnly": "[ -f .next/BUILD_ID ] || (echo 'prepublishOnly: .next/BUILD_ID missing \u2014 run npm run build first (see commit 05c1ebf body for R224 chunk-500 root cause)' >&2 && exit 1)"
11
11
  },
12
12
  "bin": {
13
13
  "agent-network-dashboard": "./bin/start.js"
@@ -44,4 +44,4 @@
44
44
  "tailwindcss": "^4",
45
45
  "typescript": "^5"
46
46
  }
47
- }
47
+ }