@sleep2agi/agent-network-dashboard 0.5.3-preview.10 → 0.5.3-preview.12

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 (156) 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/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +3 -3
  134. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  138. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  139. package/.next/server/middleware-build-manifest.js +3 -3
  140. package/.next/server/pages/404.html +2 -2
  141. package/.next/server/pages/500.html +1 -1
  142. package/.next/static/chunks/{0c9naoez330em.js → 0.yvha74oimu5.js} +1 -1
  143. package/.next/static/chunks/{0686f~8limi6v.js → 0brgpp3pfwrqa.js} +3 -3
  144. package/.next/static/chunks/{0hn_4t-p28o89.js → 0f9~w1b6yn1dj.js} +1 -1
  145. package/.next/static/chunks/{0hndl9yzpqajt.css → 0m.1mvl~t.avc.css} +1 -1
  146. package/.next/static/chunks/{0bc4e~z~9z0ei.js → 10x1zyfvy0f.8.js} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +49 -1
  150. package/app/globals.css +23 -0
  151. package/package.json +1 -1
  152. package/scripts/topo-orphan-label-italic-test.mjs +90 -0
  153. package/scripts/topo-recent-hot-pulse-test.mjs +102 -0
  154. /package/.next/static/{Bnn92TNkQrpT-G6WKh2JI → U1wWdzjMSApioHvZY8ULS}/_buildManifest.js +0 -0
  155. /package/.next/static/{Bnn92TNkQrpT-G6WKh2JI → U1wWdzjMSApioHvZY8ULS}/_clientMiddlewareManifest.js +0 -0
  156. /package/.next/static/{Bnn92TNkQrpT-G6WKh2JI → U1wWdzjMSApioHvZY8ULS}/_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.10"],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.12"],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":422,"timestamp":190468017610,"id":4,"parentId":1,"tags":{},"startTime":1778998440264,"traceId":"6887792ecd8c38f9"},{"name":"load-custom-routes","duration":729,"timestamp":190468018270,"id":5,"parentId":1,"tags":{},"startTime":1778998440265,"traceId":"6887792ecd8c38f9"},{"name":"create-dist-dir","duration":1044,"timestamp":190468019087,"id":6,"parentId":1,"tags":{},"startTime":1778998440265,"traceId":"6887792ecd8c38f9"},{"name":"clean","duration":36120,"timestamp":190468021054,"id":7,"parentId":1,"tags":{},"startTime":1778998440267,"traceId":"6887792ecd8c38f9"},{"name":"discover-routes","duration":29458,"timestamp":190468150780,"id":8,"parentId":1,"tags":{},"startTime":1778998440397,"traceId":"6887792ecd8c38f9"},{"name":"create-root-mapping","duration":156,"timestamp":190468180315,"id":9,"parentId":1,"tags":{},"startTime":1778998440427,"traceId":"6887792ecd8c38f9"},{"name":"generate-route-types","duration":23053,"timestamp":190468184106,"id":10,"parentId":1,"tags":{},"startTime":1778998440430,"traceId":"6887792ecd8c38f9"},{"name":"public-dir-conflict-check","duration":99,"timestamp":190468207247,"id":11,"parentId":1,"tags":{},"startTime":1778998440454,"traceId":"6887792ecd8c38f9"},{"name":"generate-routes-manifest","duration":5272,"timestamp":190468207471,"id":12,"parentId":1,"tags":{},"startTime":1778998440454,"traceId":"6887792ecd8c38f9"},{"name":"run-turbopack","duration":7045651,"timestamp":190468218394,"id":14,"parentId":1,"tags":{},"startTime":1778998440465,"traceId":"6887792ecd8c38f9"},{"name":"turbopack-build-events","duration":93,"timestamp":190468574407,"id":15,"parentId":1,"tags":{},"startTime":1778998440821,"traceId":"6887792ecd8c38f9"},{"name":"run-typescript","duration":10401065,"timestamp":190475290612,"id":16,"parentId":1,"tags":{},"startTime":1778998447537,"traceId":"6887792ecd8c38f9"},{"name":"generate-required-server-files","duration":2539,"timestamp":190485693238,"id":18,"parentId":1,"tags":{},"startTime":1778998457940,"traceId":"6887792ecd8c38f9"},{"name":"check-static-error-page","duration":16507,"timestamp":190485901165,"id":20,"parentId":19,"tags":{},"startTime":1778998458147,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":577974,"timestamp":190485921557,"id":65,"parentId":22,"tags":{},"startTime":1778998458168,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":595305,"timestamp":190485904423,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778998458151,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":638481,"timestamp":190485921959,"id":69,"parentId":28,"tags":{},"startTime":1778998458168,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":651433,"timestamp":190485909106,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778998458155,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":645094,"timestamp":190485924304,"id":70,"parentId":29,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":660233,"timestamp":190485909279,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778998458156,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":654972,"timestamp":190485921745,"id":67,"parentId":26,"tags":{},"startTime":1778998458168,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":668165,"timestamp":190485908621,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778998458155,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":658619,"timestamp":190485924888,"id":74,"parentId":34,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":673304,"timestamp":190485910272,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778998458157,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":679249,"timestamp":190485924781,"id":73,"parentId":33,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":693991,"timestamp":190485910122,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778998458156,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":679881,"timestamp":190485924583,"id":72,"parentId":32,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":694563,"timestamp":190485909950,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778998458156,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":687795,"timestamp":190485921851,"id":68,"parentId":27,"tags":{},"startTime":1778998458168,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":700931,"timestamp":190485908761,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778998458155,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":688084,"timestamp":190485924972,"id":77,"parentId":37,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":701870,"timestamp":190485911248,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778998458158,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":692408,"timestamp":190485924990,"id":78,"parentId":38,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":706162,"timestamp":190485911409,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778998458158,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":693073,"timestamp":190485925022,"id":79,"parentId":39,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":706609,"timestamp":190485911531,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778998458158,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":694031,"timestamp":190485924924,"id":75,"parentId":35,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":708571,"timestamp":190485910424,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778998458157,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":706721,"timestamp":190485924941,"id":76,"parentId":36,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":720669,"timestamp":190485911045,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778998458157,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":715366,"timestamp":190485921218,"id":64,"parentId":21,"tags":{},"startTime":1778998458167,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":733865,"timestamp":190485902773,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778998458149,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":711808,"timestamp":190485925043,"id":81,"parentId":42,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":724812,"timestamp":190485912104,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778998458158,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":713430,"timestamp":190485925064,"id":83,"parentId":45,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":725809,"timestamp":190485912733,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778998458161,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":718900,"timestamp":190485925182,"id":86,"parentId":48,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":729102,"timestamp":190485915041,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778998458161,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":721418,"timestamp":190485925031,"id":80,"parentId":40,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":734836,"timestamp":190485911656,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778998458158,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":722715,"timestamp":190485925191,"id":87,"parentId":49,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":732791,"timestamp":190485915153,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778998458161,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":726723,"timestamp":190485925217,"id":89,"parentId":51,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":736667,"timestamp":190485915317,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778998458162,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":728347,"timestamp":190485925170,"id":85,"parentId":47,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":738621,"timestamp":190485914943,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778998458161,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":728362,"timestamp":190485928848,"id":90,"parentId":24,"tags":{},"startTime":1778998458175,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":752223,"timestamp":190485905023,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778998458151,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":727703,"timestamp":190485931347,"id":91,"parentId":31,"tags":{},"startTime":1778998458178,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":749485,"timestamp":190485909615,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778998458156,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":738375,"timestamp":190485925055,"id":82,"parentId":44,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":750886,"timestamp":190485912587,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778998458159,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":724387,"timestamp":190485939646,"id":93,"parentId":43,"tags":{},"startTime":1778998458186,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":751811,"timestamp":190485912267,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778998458159,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":740539,"timestamp":190485925204,"id":88,"parentId":50,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":750544,"timestamp":190485915249,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778998458162,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":736975,"timestamp":190485934275,"id":92,"parentId":41,"tags":{},"startTime":1778998458181,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":759520,"timestamp":190485911780,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778998458158,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":789548,"timestamp":190485924504,"id":71,"parentId":30,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":804666,"timestamp":190485909463,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778998458156,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":800474,"timestamp":190485921654,"id":66,"parentId":25,"tags":{},"startTime":1778998458168,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":813771,"timestamp":190485908437,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778998458155,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":801895,"timestamp":190485925146,"id":84,"parentId":46,"tags":{},"startTime":1778998458171,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":812261,"timestamp":190485914845,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778998458161,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":782901,"timestamp":190485944697,"id":94,"parentId":23,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":822927,"timestamp":190485904719,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778998458151,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":790093,"timestamp":190485944795,"id":100,"parentId":58,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":818283,"timestamp":190485916654,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778998458163,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":791452,"timestamp":190485944933,"id":101,"parentId":59,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":819656,"timestamp":190485916795,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778998458163,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":792834,"timestamp":190485944742,"id":96,"parentId":53,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":821928,"timestamp":190485915693,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778998458162,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":797206,"timestamp":190485944953,"id":102,"parentId":61,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":824946,"timestamp":190485917260,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778998458164,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":801937,"timestamp":190485944980,"id":104,"parentId":63,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":829465,"timestamp":190485917493,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778998458164,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":785276,"timestamp":190485963823,"id":105,"parentId":60,"tags":{},"startTime":1778998458210,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":832208,"timestamp":190485916927,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778998458163,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":806837,"timestamp":190485944967,"id":103,"parentId":62,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":834489,"timestamp":190485917364,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778998458164,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":808119,"timestamp":190485944726,"id":95,"parentId":52,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":837283,"timestamp":190485915595,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778998458162,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":776550,"timestamp":190485977517,"id":106,"parentId":57,"tags":{},"startTime":1778998458224,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":837828,"timestamp":190485916271,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778998458163,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":832236,"timestamp":190485944756,"id":97,"parentId":54,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":861282,"timestamp":190485915792,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778998458162,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":839357,"timestamp":190485944765,"id":98,"parentId":55,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":868252,"timestamp":190485915939,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778998458162,"traceId":"6887792ecd8c38f9"},{"name":"is-page-static","duration":851987,"timestamp":190485944782,"id":99,"parentId":56,"tags":{},"startTime":1778998458191,"traceId":"6887792ecd8c38f9"},{"name":"check-page","duration":880750,"timestamp":190485916100,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778998458162,"traceId":"6887792ecd8c38f9"},{"name":"static-check","duration":896938,"timestamp":190485899972,"id":19,"parentId":1,"tags":{},"startTime":1778998458146,"traceId":"6887792ecd8c38f9"}]
2
- [{"name":"write-routes-manifest","duration":955,"timestamp":190486807477,"id":108,"parentId":1,"tags":{},"startTime":1778998459054,"traceId":"6887792ecd8c38f9"},{"name":"load-dotenv","duration":48,"timestamp":190486819723,"id":111,"parentId":110,"tags":{},"startTime":1778998459066,"traceId":"6887792ecd8c38f9"},{"name":"run-export-path-map","duration":501,"timestamp":190486822217,"id":112,"parentId":110,"tags":{},"startTime":1778998459068,"traceId":"6887792ecd8c38f9"},{"name":"next-export","duration":625957,"timestamp":190486818497,"id":110,"parentId":1,"tags":{},"startTime":1778998459065,"traceId":"6887792ecd8c38f9"},{"name":"move-exported-app-not-found-","duration":579,"timestamp":190487447586,"id":113,"parentId":109,"tags":{},"startTime":1778998459694,"traceId":"6887792ecd8c38f9"},{"name":"move-exported-app-global-error-","duration":422,"timestamp":190487448251,"id":114,"parentId":109,"tags":{},"startTime":1778998459695,"traceId":"6887792ecd8c38f9"},{"name":"static-generation","duration":638023,"timestamp":190486813053,"id":109,"parentId":1,"tags":{},"startTime":1778998459059,"traceId":"6887792ecd8c38f9"},{"name":"write-routes-manifest","duration":403,"timestamp":190487451339,"id":115,"parentId":1,"tags":{},"startTime":1778998459698,"traceId":"6887792ecd8c38f9"},{"name":"print-tree-view","duration":3720,"timestamp":190487470409,"id":116,"parentId":1,"tags":{},"startTime":1778998459717,"traceId":"6887792ecd8c38f9"},{"name":"write-route-bundle-stats","duration":14054,"timestamp":190487474160,"id":117,"parentId":1,"tags":{},"startTime":1778998459720,"traceId":"6887792ecd8c38f9"},{"name":"telemetry-flush","duration":18136,"timestamp":190487488244,"id":118,"parentId":1,"tags":{},"startTime":1778998459735,"traceId":"6887792ecd8c38f9"},{"name":"next-build","duration":19552706,"timestamp":190467953707,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778998440200,"traceId":"6887792ecd8c38f9"}]
1
+ [{"name":"generate-buildid","duration":366,"timestamp":191819503244,"id":4,"parentId":1,"tags":{},"startTime":1778999791750,"traceId":"8d9bf61714df8075"},{"name":"load-custom-routes","duration":1437,"timestamp":191819503846,"id":5,"parentId":1,"tags":{},"startTime":1778999791750,"traceId":"8d9bf61714df8075"},{"name":"create-dist-dir","duration":1631,"timestamp":191819505477,"id":6,"parentId":1,"tags":{},"startTime":1778999791752,"traceId":"8d9bf61714df8075"},{"name":"clean","duration":40497,"timestamp":191819508721,"id":7,"parentId":1,"tags":{},"startTime":1778999791755,"traceId":"8d9bf61714df8075"},{"name":"discover-routes","duration":28871,"timestamp":191819648579,"id":8,"parentId":1,"tags":{},"startTime":1778999791895,"traceId":"8d9bf61714df8075"},{"name":"create-root-mapping","duration":151,"timestamp":191819677539,"id":9,"parentId":1,"tags":{},"startTime":1778999791924,"traceId":"8d9bf61714df8075"},{"name":"generate-route-types","duration":27146,"timestamp":191819680166,"id":10,"parentId":1,"tags":{},"startTime":1778999791926,"traceId":"8d9bf61714df8075"},{"name":"public-dir-conflict-check","duration":129,"timestamp":191819707414,"id":11,"parentId":1,"tags":{},"startTime":1778999791954,"traceId":"8d9bf61714df8075"},{"name":"generate-routes-manifest","duration":4975,"timestamp":191819707664,"id":12,"parentId":1,"tags":{},"startTime":1778999791954,"traceId":"8d9bf61714df8075"},{"name":"run-turbopack","duration":7581746,"timestamp":191819728852,"id":14,"parentId":1,"tags":{},"startTime":1778999791975,"traceId":"8d9bf61714df8075"},{"name":"turbopack-build-events","duration":77,"timestamp":191820094165,"id":15,"parentId":1,"tags":{},"startTime":1778999792340,"traceId":"8d9bf61714df8075"},{"name":"run-typescript","duration":11160716,"timestamp":191827320119,"id":16,"parentId":1,"tags":{},"startTime":1778999799566,"traceId":"8d9bf61714df8075"},{"name":"generate-required-server-files","duration":3067,"timestamp":191838482237,"id":18,"parentId":1,"tags":{},"startTime":1778999810729,"traceId":"8d9bf61714df8075"},{"name":"check-static-error-page","duration":18440,"timestamp":191838765659,"id":20,"parentId":19,"tags":{},"startTime":1778999811012,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":611033,"timestamp":191838789594,"id":65,"parentId":22,"tags":{},"startTime":1778999811036,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":631698,"timestamp":191838769133,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778999811015,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":724368,"timestamp":191838789764,"id":67,"parentId":26,"tags":{},"startTime":1778999811036,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":741491,"timestamp":191838772747,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778999811019,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":748492,"timestamp":191838790203,"id":70,"parentId":29,"tags":{},"startTime":1778999811036,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":765560,"timestamp":191838773220,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778999811019,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":760117,"timestamp":191838789844,"id":68,"parentId":27,"tags":{},"startTime":1778999811036,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":777159,"timestamp":191838772898,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778999811019,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":774805,"timestamp":191838790455,"id":72,"parentId":32,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":791266,"timestamp":191838774081,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778999811020,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":790213,"timestamp":191838789905,"id":69,"parentId":28,"tags":{},"startTime":1778999811036,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":807113,"timestamp":191838773082,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778999811019,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":792734,"timestamp":191838790762,"id":75,"parentId":35,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":809045,"timestamp":191838774518,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778999811021,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":799135,"timestamp":191838790636,"id":73,"parentId":33,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":815598,"timestamp":191838774239,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778999811021,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":802087,"timestamp":191838790833,"id":77,"parentId":37,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":817567,"timestamp":191838775416,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778999811022,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":807106,"timestamp":191838790866,"id":79,"parentId":39,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":822299,"timestamp":191838775736,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778999811022,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":811766,"timestamp":191838790880,"id":80,"parentId":40,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":826837,"timestamp":191838775855,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778999811022,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":812913,"timestamp":191838790727,"id":74,"parentId":34,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":829312,"timestamp":191838774369,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778999811021,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":819499,"timestamp":191838790908,"id":82,"parentId":44,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":833723,"timestamp":191838776731,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778999811023,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":822585,"timestamp":191838790894,"id":81,"parentId":42,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":837243,"timestamp":191838776297,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778999811023,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":830273,"timestamp":191838790934,"id":84,"parentId":46,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":844230,"timestamp":191838777026,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778999811023,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":830624,"timestamp":191838790784,"id":76,"parentId":36,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":846254,"timestamp":191838775186,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778999811021,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":836495,"timestamp":191838790948,"id":85,"parentId":47,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":850349,"timestamp":191838777150,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778999811023,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":839495,"timestamp":191838790958,"id":86,"parentId":48,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":850910,"timestamp":191838779596,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778999811026,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":840521,"timestamp":191838790855,"id":78,"parentId":38,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":855804,"timestamp":191838775615,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778999811022,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":843108,"timestamp":191838790970,"id":87,"parentId":49,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":854362,"timestamp":191838779762,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778999811026,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":845186,"timestamp":191838790995,"id":89,"parentId":51,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":856251,"timestamp":191838779976,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778999811026,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":845766,"timestamp":191838790983,"id":88,"parentId":50,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":856918,"timestamp":191838779881,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778999811026,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":843199,"timestamp":191838795108,"id":90,"parentId":24,"tags":{},"startTime":1778999811041,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":868669,"timestamp":191838769682,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778999811016,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":848852,"timestamp":191838790919,"id":83,"parentId":45,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":862943,"timestamp":191838776879,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778999811023,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":846384,"timestamp":191838796300,"id":91,"parentId":31,"tags":{},"startTime":1778999811043,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":868997,"timestamp":191838773728,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778999811020,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":847300,"timestamp":191838798519,"id":93,"parentId":43,"tags":{},"startTime":1778999811045,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":869790,"timestamp":191838776437,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778999811023,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":861961,"timestamp":191838789694,"id":66,"parentId":25,"tags":{},"startTime":1778999811036,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":879147,"timestamp":191838772553,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778999811019,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":867424,"timestamp":191838790389,"id":71,"parentId":30,"tags":{},"startTime":1778999811037,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":884291,"timestamp":191838773567,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778999811020,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":875356,"timestamp":191838797228,"id":92,"parentId":41,"tags":{},"startTime":1778999811044,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":896685,"timestamp":191838775956,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778999811022,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":907766,"timestamp":191838800837,"id":96,"parentId":53,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":927984,"timestamp":191838780696,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778999811027,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":928776,"timestamp":191838789289,"id":64,"parentId":21,"tags":{},"startTime":1778999811036,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":950709,"timestamp":191838767425,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778999811014,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":917464,"timestamp":191838800886,"id":100,"parentId":58,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":936032,"timestamp":191838782361,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778999811029,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":928170,"timestamp":191838801026,"id":101,"parentId":59,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":946697,"timestamp":191838782579,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778999811029,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":937031,"timestamp":191838800827,"id":95,"parentId":52,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":957477,"timestamp":191838780433,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778999811027,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":937018,"timestamp":191838801047,"id":102,"parentId":61,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":954629,"timestamp":191838783474,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778999811030,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":943296,"timestamp":191838800794,"id":94,"parentId":23,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":974708,"timestamp":191838769435,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778999811016,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":942215,"timestamp":191838808780,"id":105,"parentId":60,"tags":{},"startTime":1778999811055,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":968295,"timestamp":191838782765,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778999811029,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":912228,"timestamp":191838840111,"id":106,"parentId":57,"tags":{},"startTime":1778999811086,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":970662,"timestamp":191838781717,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778999811028,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":951388,"timestamp":191838801070,"id":104,"parentId":63,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":968663,"timestamp":191838783820,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778999811030,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":955174,"timestamp":191838800864,"id":98,"parentId":55,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":974948,"timestamp":191838781139,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778999811027,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":960372,"timestamp":191838800877,"id":99,"parentId":56,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":979916,"timestamp":191838781379,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778999811028,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":970832,"timestamp":191838801057,"id":103,"parentId":62,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":988304,"timestamp":191838783649,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778999811030,"traceId":"8d9bf61714df8075"},{"name":"is-page-static","duration":985428,"timestamp":191838800851,"id":97,"parentId":54,"tags":{},"startTime":1778999811047,"traceId":"8d9bf61714df8075"},{"name":"check-page","duration":1005450,"timestamp":191838780892,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778999811027,"traceId":"8d9bf61714df8075"},{"name":"static-check","duration":1021905,"timestamp":191838764476,"id":19,"parentId":1,"tags":{},"startTime":1778999811011,"traceId":"8d9bf61714df8075"}]
2
+ [{"name":"write-routes-manifest","duration":1063,"timestamp":191839806296,"id":108,"parentId":1,"tags":{},"startTime":1778999812053,"traceId":"8d9bf61714df8075"},{"name":"load-dotenv","duration":76,"timestamp":191839827373,"id":111,"parentId":110,"tags":{},"startTime":1778999812074,"traceId":"8d9bf61714df8075"},{"name":"run-export-path-map","duration":812,"timestamp":191839840230,"id":112,"parentId":110,"tags":{},"startTime":1778999812087,"traceId":"8d9bf61714df8075"},{"name":"next-export","duration":725506,"timestamp":191839822237,"id":110,"parentId":1,"tags":{},"startTime":1778999812069,"traceId":"8d9bf61714df8075"},{"name":"move-exported-app-not-found-","duration":619,"timestamp":191840552063,"id":113,"parentId":109,"tags":{},"startTime":1778999812798,"traceId":"8d9bf61714df8075"},{"name":"move-exported-app-global-error-","duration":505,"timestamp":191840552781,"id":114,"parentId":109,"tags":{},"startTime":1778999812799,"traceId":"8d9bf61714df8075"},{"name":"static-generation","duration":742658,"timestamp":191839812712,"id":109,"parentId":1,"tags":{},"startTime":1778999812059,"traceId":"8d9bf61714df8075"},{"name":"write-routes-manifest","duration":465,"timestamp":191840555608,"id":115,"parentId":1,"tags":{},"startTime":1778999812802,"traceId":"8d9bf61714df8075"},{"name":"print-tree-view","duration":4511,"timestamp":191840574563,"id":116,"parentId":1,"tags":{},"startTime":1778999812821,"traceId":"8d9bf61714df8075"},{"name":"write-route-bundle-stats","duration":15112,"timestamp":191840579105,"id":117,"parentId":1,"tags":{},"startTime":1778999812825,"traceId":"8d9bf61714df8075"},{"name":"telemetry-flush","duration":22777,"timestamp":191840594255,"id":118,"parentId":1,"tags":{},"startTime":1778999812841,"traceId":"8d9bf61714df8075"},{"name":"next-build","duration":21177507,"timestamp":191819439582,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778999791686,"traceId":"8d9bf61714df8075"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":7045651,"timestamp":190468218394,"id":14,"parentId":1,"tags":{},"startTime":1778998440465,"traceId":"6887792ecd8c38f9"},{"name":"turbopack-build-events","duration":93,"timestamp":190468574407,"id":15,"parentId":1,"tags":{},"startTime":1778998440821,"traceId":"6887792ecd8c38f9"},{"name":"run-typescript","duration":10401065,"timestamp":190475290612,"id":16,"parentId":1,"tags":{},"startTime":1778998447537,"traceId":"6887792ecd8c38f9"},{"name":"static-check","duration":896938,"timestamp":190485899972,"id":19,"parentId":1,"tags":{},"startTime":1778998458146,"traceId":"6887792ecd8c38f9"},{"name":"static-generation","duration":638023,"timestamp":190486813053,"id":109,"parentId":1,"tags":{},"startTime":1778998459059,"traceId":"6887792ecd8c38f9"},{"name":"telemetry-flush","duration":18136,"timestamp":190487488244,"id":118,"parentId":1,"tags":{},"startTime":1778998459735,"traceId":"6887792ecd8c38f9"},{"name":"next-build","duration":19552706,"timestamp":190467953707,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778998440200,"traceId":"6887792ecd8c38f9"}]
1
+ [{"name":"run-turbopack","duration":7581746,"timestamp":191819728852,"id":14,"parentId":1,"tags":{},"startTime":1778999791975,"traceId":"8d9bf61714df8075"},{"name":"turbopack-build-events","duration":77,"timestamp":191820094165,"id":15,"parentId":1,"tags":{},"startTime":1778999792340,"traceId":"8d9bf61714df8075"},{"name":"run-typescript","duration":11160716,"timestamp":191827320119,"id":16,"parentId":1,"tags":{},"startTime":1778999799566,"traceId":"8d9bf61714df8075"},{"name":"static-check","duration":1021905,"timestamp":191838764476,"id":19,"parentId":1,"tags":{},"startTime":1778999811011,"traceId":"8d9bf61714df8075"},{"name":"static-generation","duration":742658,"timestamp":191839812712,"id":109,"parentId":1,"tags":{},"startTime":1778999812059,"traceId":"8d9bf61714df8075"},{"name":"telemetry-flush","duration":22777,"timestamp":191840594255,"id":118,"parentId":1,"tags":{},"startTime":1778999812841,"traceId":"8d9bf61714df8075"},{"name":"next-build","duration":21177507,"timestamp":191819439582,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778999791686,"traceId":"8d9bf61714df8075"}]
@@ -867,12 +867,19 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
867
867
  // R63 label render + R86 hover-pin keying + #99 tooltip
868
868
  // member listing, so all the existing group-box machinery
869
869
  // applies uniformly to the orphan bucket too.
870
+ // Round 499 / Loop — surface `isOrphan` flag on the box
871
+ // shape so downstream renderers (label text, future polish)
872
+ // can apply orphan-specific typography (italic) without
873
+ // re-deriving the flag from key === '其他' (key matching
874
+ // would also catch a legitimate "其他" prefix-group, this
875
+ // flag is canonical from the band assignment pass).
870
876
  return {
871
877
  key: band.isOrphan
872
878
  ? '其他'
873
879
  : band.members.length
874
880
  ? groupKeys[band.members[0].alias]
875
881
  : '',
882
+ isOrphan: !!band.isOrphan,
876
883
  count: band.members.length,
877
884
  statuses: { working: w, idle: i, offline: o },
878
885
  x: minX - GROUP_PAD,
@@ -977,7 +984,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
977
984
  groupKeys,
978
985
  // #111: group boxes are a grid-layout feature only — radially scattered
979
986
  // ring nodes can't be cleanly boxed. Ring keeps the #83 prefix hue.
980
- groupBoxes: [] as { key: string; count: number; statuses: { working: number; idle: number; offline: number }; x: number; y: number; w: number; h: number }[],
987
+ groupBoxes: [] as { key: string; isOrphan?: boolean; count: number; statuses: { working: number; idle: number; offline: number }; x: number; y: number; w: number; h: number }[],
981
988
  // ring fits within VIEWBOX_H by construction (offlineRadius=325 + centre at y=330)
982
989
  gridContentBottom: 0,
983
990
  };
@@ -4906,16 +4913,39 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4906
4913
  ease-out' alongside the existing fill/ls/fw/opacity
4907
4914
  200ms tweens. */
4908
4915
  data-group-label-glow={isPinned ? 'true' : 'false'}
4916
+ /* Round 499 / Loop — orphan band "其他" label gets
4917
+ fontStyle: italic to visually distinguish the
4918
+ catchall from real prefix-group bands. Pre-R499
4919
+ the orphan box label rendered identically to
4920
+ prefix-group labels (Hero D fontSize=9, fw=700,
4921
+ opacity 0.55 rest), so users had to read the
4922
+ literal text "其他" to identify the catchall. R499
4923
+ adds a pure-typography differentiation: italic
4924
+ signals "this is the misc bucket, not a real
4925
+ named group" while preserving full opacity
4926
+ affordance on hover/pin — the orphan box stays
4927
+ equally inspectable, just typographically marked
4928
+ as a different category. No geometry change
4929
+ (italic shifts glyph slant within the same bbox),
4930
+ no opacity loss, no behavior change. Sibling to
4931
+ R432 letter-spacing 3-tier + R457 pin fw-lift +
4932
+ R479 pin drop-shadow at the group-label scope.
4933
+ Falls under 配色 / 节点视觉 themes per the prompt;
4934
+ advances the "信息密度" axis by encoding
4935
+ category-distinction into a single typography
4936
+ channel without adding visual chrome. */
4909
4937
  style={{
4910
4938
  transition: 'fill 200ms ease-out, letter-spacing 200ms ease-out, font-weight 200ms ease-out, opacity 200ms ease-out, filter 200ms ease-out',
4911
4939
  letterSpacing: isPinned ? '0.5px' :
4912
4940
  isHovered ? '0.25px' : '0px',
4941
+ fontStyle: box.isOrphan ? 'italic' : undefined,
4913
4942
  filter: isPinned
4914
4943
  ? `drop-shadow(0 0 3px ${pal.legendAccent}80)`
4915
4944
  : undefined,
4916
4945
  }}
4917
4946
  data-group-label={box.key}
4918
4947
  data-group-label-pinned={isPinned ? 'true' : 'false'}
4948
+ data-group-label-orphan={box.isOrphan ? 'true' : 'false'}
4919
4949
  >
4920
4950
  {box.key}
4921
4951
  {/* Round 19 / Loop: member-count chip. Inline tspan stays
@@ -9465,12 +9495,30 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
9465
9495
  under the same R320 fill cadence. data-
9466
9496
  recent-row-count-pinned attr exposes the
9467
9497
  pin gate for tests. */}
9498
+ {/* Round 498 / Loop — hot-count subtle pulse. Pre-
9499
+ R498 the hot row count signaled via color (R127
9500
+ amber fill) + weight (R320 fw-700) + (R445 pin
9501
+ lift) but stayed visually motionless. R498 adds
9502
+ a 3s opacity breath (0.85↔1.0) on the digit when
9503
+ isHot && !reducedMotion — gentle "alive" signal
9504
+ on the lane carrying ≥ 10 messages, drawing
9505
+ glance without becoming noisy. Sibling of R497
9506
+ hub-idle-breath in the 呼吸感 theme arc; same
9507
+ 0.85↔1.0 amplitude. Class adds an animation-
9508
+ only paint axis; no layout / bbox change. R29
9509
+ blanket also catches `animation-duration` for
9510
+ reducedMotion users, but the component-side
9511
+ gate makes the intent explicit and avoids
9512
+ a node tree thrash for those users (className
9513
+ stays absent rather than present-but-paused). */}
9468
9514
  <tspan
9469
9515
  fill={isHot ? hotStroke : undefined}
9470
9516
  fontWeight={(isHot || isRowPinned) ? '700' : '600'}
9517
+ className={isHot && !reducedMotion ? 'anet-recent-hot-pulse' : undefined}
9471
9518
  data-recent-row-count
9472
9519
  data-recent-row-count-pinned={isRowPinned ? 'true' : 'false'}
9473
9520
  data-recent-row-count-font-weight={(isHot || isRowPinned) ? '700' : '600'}
9521
+ data-recent-row-count-hot-pulse={isHot && !reducedMotion ? 'true' : 'false'}
9474
9522
  {...(isHot ? { 'data-recent-row-count-hot': 'true' } : {})}
9475
9523
  style={{
9476
9524
  transition: 'fill 300ms ease-out, font-weight 200ms ease-out',
package/app/globals.css CHANGED
@@ -863,6 +863,29 @@ body {
863
863
  transform-box: fill-box;
864
864
  }
865
865
 
866
+ /* Round 498 — recent-signal row hot-count subtle pulse (信息密度 +
867
+ 呼吸感 themes). When a row's edge count crosses the hot threshold
868
+ (≥ 10), the existing R127/R320/R445 amber-fill + fw-700 typography
869
+ already calls attention; R498 adds a slow 3s opacity breath (0.85 ↔
870
+ 1.0) on the digit so the hot tspans gently pulse — at-a-glance scan
871
+ of the panel reads "high-traffic lane right here" with motion in
872
+ addition to color+weight. 3s cycle is deliberate: faster (1-2s)
873
+ would compete with the working-status halo cadence; slower (5s+)
874
+ would lose the "alive" signal. Amplitude 15% (matches R497 hub-
875
+ highlight breath idiom).
876
+ prefers-reduced-motion handled by the R29 blanket override
877
+ (animation-duration: 0.001ms !important) — no per-class guard
878
+ needed. The component-side gate (`!reducedMotion && isHot`)
879
+ ensures the className is only applied when both conditions hold,
880
+ so even without the blanket the no-motion preference is respected. */
881
+ @keyframes anet-recent-hot-pulse-kf {
882
+ 0%, 100% { opacity: 0.85; }
883
+ 50% { opacity: 1; }
884
+ }
885
+ .anet-recent-hot-pulse {
886
+ animation: anet-recent-hot-pulse-kf 3s ease-in-out infinite;
887
+ }
888
+
866
889
  /* Round 36 — current-step ring pulse on TaskDrawer timeline. Halo gently
867
890
  breathes around the active step's dot so users can spot "task is here". */
868
891
  @keyframes anet-current-step-pulse-kf {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.10",
3
+ "version": "0.5.3-preview.12",
4
4
  "description": "Agent Network Dashboard — Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -0,0 +1,90 @@
1
+ /* Round 499 verification: orphan band "其他" label gets fontStyle:
2
+ * italic, while prefix-group labels (alpha/beta/etc.) stay roman.
3
+ * Pure typography differentiation — no opacity / weight / fill / bbox
4
+ * change. data-group-label-orphan attr surfaces the gate for tests.
5
+ *
6
+ * Fixture: 2 prefix groups (alpha×3, beta×2) + 3 orphans (zeta/omega/
7
+ * lonely) — forces #150 orphan-band creation with at least 1 orphan
8
+ * and ≥ 1 prefix-group for differential assertion.
9
+ */
10
+ import { chromium } from 'playwright';
11
+ import { readFileSync } from 'node:fs';
12
+
13
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
14
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
15
+
16
+ const browser = await chromium.launch({ headless: true });
17
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
18
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
19
+ await ctx.addInitScript(() => {
20
+ try {
21
+ localStorage.setItem('anet-theme', 'cyber');
22
+ // grid layout required for groupBoxes to render
23
+ localStorage.setItem('anet-topo-layout', 'grid');
24
+ sessionStorage.setItem('anet_v3_auth', '1');
25
+ } catch {}
26
+ });
27
+ await ctx.route('**/api/hub/status*', async (route) => {
28
+ const r = await route.fetch();
29
+ const b = await r.json();
30
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
31
+ const mk = (alias, status) => ({
32
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
33
+ network_id: nid, project_dir: null,
34
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
35
+ });
36
+ await route.fulfill({ response: r, json: { ...b, sessions: [
37
+ mk('alpha·1', 'working'), mk('alpha·2', 'idle'), mk('alpha·3', 'idle'),
38
+ mk('beta·1', 'working'), mk('beta·2', 'idle'),
39
+ mk('zeta', 'idle'),
40
+ mk('omega', 'idle'),
41
+ mk('lonely', 'idle'),
42
+ ] } });
43
+ });
44
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
45
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
46
+ const page = await ctx.newPage();
47
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
48
+ await page.waitForSelector('[data-group-label]', { timeout: 15000 });
49
+ await page.waitForTimeout(1500);
50
+
51
+ const labels = await page.evaluate(() => {
52
+ const els = Array.from(document.querySelectorAll('[data-group-label]'));
53
+ return els.map((el) => {
54
+ const cs = window.getComputedStyle(el);
55
+ return {
56
+ key: el.getAttribute('data-group-label'),
57
+ orphan_attr:el.getAttribute('data-group-label-orphan'),
58
+ font_style: cs.fontStyle,
59
+ };
60
+ });
61
+ });
62
+
63
+ await browser.close();
64
+
65
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
66
+ const sourceTypeWired = /groupBoxes: \[\] as \{ key: string; isOrphan\?: boolean;/.test(src);
67
+ const sourceFieldWired = /isOrphan: !!band\.isOrphan,/.test(src);
68
+ const sourceStyleWired = /fontStyle: box\.isOrphan \? 'italic' : undefined/.test(src);
69
+ const sourceAttrWired = /data-group-label-orphan=\{box\.isOrphan \? 'true' : 'false'\}/.test(src);
70
+
71
+ const orphanLabel = labels.find((l) => l.key === '其他');
72
+ const prefixLabels = labels.filter((l) => l.key !== '其他' && l.key !== '');
73
+
74
+ const results = {
75
+ found_labels: labels.length >= 2,
76
+ orphan_label_present: !!orphanLabel,
77
+ orphan_attr_true: orphanLabel && orphanLabel.orphan_attr === 'true',
78
+ orphan_font_italic: orphanLabel && orphanLabel.font_style === 'italic',
79
+ prefix_labels_present: prefixLabels.length >= 1,
80
+ prefix_attrs_false: prefixLabels.length > 0 && prefixLabels.every((p) => p.orphan_attr === 'false'),
81
+ prefix_font_normal: prefixLabels.length > 0 && prefixLabels.every((p) => p.font_style !== 'italic'),
82
+ source_type_wired: sourceTypeWired,
83
+ source_field_wired: sourceFieldWired,
84
+ source_style_wired: sourceStyleWired,
85
+ source_attr_wired: sourceAttrWired,
86
+ };
87
+ const ok = Object.values(results).every(Boolean);
88
+ console.log(`${ok ? '✅' : '❌'} R499 orphan label italic:`, JSON.stringify(results),
89
+ '\n labels:', JSON.stringify(labels));
90
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,102 @@
1
+ /* Round 498 verification: recent-signal row hot-count tspan gains a
2
+ * 3s opacity pulse (0.85↔1.0) when count >= 10 (isHot && !reducedMotion).
3
+ * Adds the 呼吸感 theme's second anchor after R497 hub idle-breath —
4
+ * gentle motion attracts glance to high-traffic lanes.
5
+ *
6
+ * Test scenarios — needs >= 10 messages between two aliases to trigger
7
+ * the hot threshold AND the recent-signal panel to render. Uses a
8
+ * messages fixture with 10 messages from alpha·a1 → alpha·a2.
9
+ */
10
+ import { chromium } from 'playwright';
11
+ import { readFileSync } from 'node:fs';
12
+
13
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
14
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
15
+
16
+ async function probe({ reducedMotion }) {
17
+ const browser = await chromium.launch({ headless: true });
18
+ const ctx = await browser.newContext({
19
+ viewport: { width: 1500, height: 1200 },
20
+ reducedMotion: reducedMotion ? 'reduce' : 'no-preference',
21
+ });
22
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
23
+ await ctx.addInitScript(() => {
24
+ try {
25
+ localStorage.setItem('anet-theme', 'cyber');
26
+ localStorage.setItem('anet-topo-layout', 'ring');
27
+ sessionStorage.setItem('anet_v3_auth', '1');
28
+ } catch {}
29
+ });
30
+ await ctx.route('**/api/hub/status*', async (route) => {
31
+ const r = await route.fetch();
32
+ const b = await r.json();
33
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
34
+ const mk = (alias, status) => ({
35
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
36
+ network_id: nid, project_dir: null,
37
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
38
+ });
39
+ await route.fulfill({ response: r, json: { ...b, sessions: [
40
+ mk('alpha·a1', 'working'),
41
+ mk('alpha·a2', 'idle'),
42
+ ] } });
43
+ });
44
+ // 12 messages → count >= 10 → isHot true
45
+ const msgs = Array.from({ length: 12 }, (_, i) => ({
46
+ id: `m${i}`, from_alias: 'alpha·a1', to_alias: 'alpha·a2',
47
+ content: 'test', created_at: fresh,
48
+ }));
49
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: msgs } }));
50
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
51
+ const page = await ctx.newPage();
52
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
53
+ await page.waitForTimeout(2000);
54
+
55
+ const result = await page.evaluate(() => {
56
+ const tspans = Array.from(document.querySelectorAll('[data-recent-row-count]'));
57
+ const hotTspan = tspans.find((t) => t.getAttribute('data-recent-row-count-hot') === 'true');
58
+ if (!hotTspan) return { found: false, totalTspans: tspans.length };
59
+ const cs = window.getComputedStyle(hotTspan);
60
+ return {
61
+ found: true,
62
+ class_has_pulse: /anet-recent-hot-pulse/.test(hotTspan.getAttribute('class') || ''),
63
+ pulse_attr: hotTspan.getAttribute('data-recent-row-count-hot-pulse'),
64
+ animation_name: cs.animationName,
65
+ animation_duration: cs.animationDuration,
66
+ };
67
+ });
68
+ await browser.close();
69
+ return result;
70
+ }
71
+
72
+ const motion = await probe({ reducedMotion: false });
73
+ const a11y = await probe({ reducedMotion: true });
74
+
75
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
76
+ const css = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
77
+ const sourceClassWired = /className=\{isHot && !reducedMotion \? 'anet-recent-hot-pulse' : undefined\}/.test(src);
78
+ const sourceAttrWired = /data-recent-row-count-hot-pulse=\{isHot && !reducedMotion \? 'true' : 'false'\}/.test(src);
79
+ const cssKeyframeWired = /@keyframes anet-recent-hot-pulse-kf\s*\{[\s\S]*?opacity:\s*0\.85[\s\S]*?opacity:\s*1[\s\S]*?\}/.test(css);
80
+ const cssClassWired = /\.anet-recent-hot-pulse\s*\{\s*animation:\s*anet-recent-hot-pulse-kf 3s ease-in-out infinite/.test(css);
81
+
82
+ const results = {
83
+ // Motion fixture: tspan found + class applied + attr='true' + animation runs
84
+ motion_hot_found: motion.found,
85
+ motion_class_pulse: motion.found && motion.class_has_pulse,
86
+ motion_attr_true: motion.found && motion.pulse_attr === 'true',
87
+ motion_anim_name: motion.found && motion.animation_name === 'anet-recent-hot-pulse-kf',
88
+ // a11y fixture: class still absent (component-side gate) — attr='false'
89
+ a11y_hot_found: a11y.found,
90
+ a11y_no_class: a11y.found && !a11y.class_has_pulse,
91
+ a11y_attr_false: a11y.found && a11y.pulse_attr === 'false',
92
+ // Source/CSS
93
+ source_class_wired: sourceClassWired,
94
+ source_attr_wired: sourceAttrWired,
95
+ css_keyframe_wired: cssKeyframeWired,
96
+ css_class_wired: cssClassWired,
97
+ };
98
+ const ok = Object.values(results).every(Boolean);
99
+ console.log(`${ok ? '✅' : '❌'} R498 recent-row hot pulse:`, JSON.stringify(results),
100
+ '\n motion:', JSON.stringify(motion),
101
+ '\n a11y: ', JSON.stringify(a11y));
102
+ process.exit(ok ? 0 : 1);