@sleep2agi/agent-network-dashboard 0.5.3-preview.252 → 0.5.3-preview.254

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 (158) 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 +1 -1
  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/{0x-5lk.0kyort.js → 0-t50keogxsg1.js} +1 -1
  143. package/.next/static/chunks/{0culr_bidzj0m.css → 0kxp3b9ooqo9w.css} +1 -1
  144. package/.next/static/chunks/{0jpw62w_o0evv.js → 0u.ob15vjha6u.js} +1 -1
  145. package/.next/static/chunks/{0f6r4cjf~k7~j.js → 0~4k1nbapvia1.js} +3 -3
  146. package/.next/static/chunks/{0g84jw2-4ete9.js → 11hzac0zl0f91.js} +1 -1
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +72 -20
  150. package/app/globals.css +33 -0
  151. package/package.json +1 -1
  152. package/scripts/topo-a11y-titles-catalog-test.mjs +2 -2
  153. package/scripts/topo-canvas-entrance-animation-test.mjs +117 -0
  154. package/scripts/topo-canvas-scan-beam-diagonal-test.mjs +148 -0
  155. package/scripts/topo-respiratory-patterns-catalog-test.mjs +5 -5
  156. /package/.next/static/{cJtkfCMBFbZcSau6IWC8T → 0ShBgwMviORwHuIMhcMPr}/_buildManifest.js +0 -0
  157. /package/.next/static/{cJtkfCMBFbZcSau6IWC8T → 0ShBgwMviORwHuIMhcMPr}/_clientMiddlewareManifest.js +0 -0
  158. /package/.next/static/{cJtkfCMBFbZcSau6IWC8T → 0ShBgwMviORwHuIMhcMPr}/_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.251"],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.253"],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":355,"timestamp":416542595116,"id":4,"parentId":1,"tags":{},"startTime":1779224514841,"traceId":"e359de374d751faa"},{"name":"load-custom-routes","duration":733,"timestamp":416542595691,"id":5,"parentId":1,"tags":{},"startTime":1779224514842,"traceId":"e359de374d751faa"},{"name":"create-dist-dir","duration":753,"timestamp":416542596492,"id":6,"parentId":1,"tags":{},"startTime":1779224514843,"traceId":"e359de374d751faa"},{"name":"clean","duration":35886,"timestamp":416542597987,"id":7,"parentId":1,"tags":{},"startTime":1779224514844,"traceId":"e359de374d751faa"},{"name":"discover-routes","duration":27108,"timestamp":416542717133,"id":8,"parentId":1,"tags":{},"startTime":1779224514963,"traceId":"e359de374d751faa"},{"name":"create-root-mapping","duration":204,"timestamp":416542744310,"id":9,"parentId":1,"tags":{},"startTime":1779224514991,"traceId":"e359de374d751faa"},{"name":"generate-route-types","duration":21639,"timestamp":416542747264,"id":10,"parentId":1,"tags":{},"startTime":1779224514994,"traceId":"e359de374d751faa"},{"name":"public-dir-conflict-check","duration":110,"timestamp":416542769036,"id":11,"parentId":1,"tags":{},"startTime":1779224515015,"traceId":"e359de374d751faa"},{"name":"generate-routes-manifest","duration":7367,"timestamp":416542769361,"id":12,"parentId":1,"tags":{},"startTime":1779224515016,"traceId":"e359de374d751faa"},{"name":"run-turbopack","duration":6239139,"timestamp":416542791613,"id":14,"parentId":1,"tags":{},"startTime":1779224515038,"traceId":"e359de374d751faa"},{"name":"turbopack-build-events","duration":100,"timestamp":416543097879,"id":15,"parentId":1,"tags":{},"startTime":1779224515344,"traceId":"e359de374d751faa"},{"name":"run-typescript","duration":10257958,"timestamp":416549041426,"id":16,"parentId":1,"tags":{},"startTime":1779224521288,"traceId":"e359de374d751faa"},{"name":"generate-required-server-files","duration":3488,"timestamp":416559300796,"id":18,"parentId":1,"tags":{},"startTime":1779224531547,"traceId":"e359de374d751faa"},{"name":"check-static-error-page","duration":16900,"timestamp":416559486804,"id":20,"parentId":19,"tags":{},"startTime":1779224531733,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":437593,"timestamp":416559507709,"id":65,"parentId":22,"tags":{},"startTime":1779224531754,"traceId":"e359de374d751faa"},{"name":"check-page","duration":455416,"timestamp":416559490094,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779224531736,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":556862,"timestamp":416559508579,"id":71,"parentId":30,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":571405,"timestamp":416559494158,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779224531740,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":569337,"timestamp":416559507856,"id":66,"parentId":25,"tags":{},"startTime":1779224531754,"traceId":"e359de374d751faa"},{"name":"check-page","duration":583874,"timestamp":416559493405,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779224531740,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":570283,"timestamp":416559508138,"id":69,"parentId":28,"tags":{},"startTime":1779224531754,"traceId":"e359de374d751faa"},{"name":"check-page","duration":584648,"timestamp":416559493850,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779224531740,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":572956,"timestamp":416559508649,"id":72,"parentId":32,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":587070,"timestamp":416559494599,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779224531741,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":578550,"timestamp":416559508898,"id":74,"parentId":34,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":592596,"timestamp":416559494919,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779224531741,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":610670,"timestamp":416559508931,"id":75,"parentId":35,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":624590,"timestamp":416559495088,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779224531741,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":617580,"timestamp":416559508982,"id":77,"parentId":37,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":630808,"timestamp":416559495828,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779224531742,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":620160,"timestamp":416559508038,"id":68,"parentId":27,"tags":{},"startTime":1779224531754,"traceId":"e359de374d751faa"},{"name":"check-page","duration":634591,"timestamp":416559493708,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779224531740,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":625904,"timestamp":416559509019,"id":78,"parentId":38,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":638999,"timestamp":416559495982,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779224531742,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":634284,"timestamp":416559509048,"id":80,"parentId":40,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":647156,"timestamp":416559496249,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779224531743,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":638739,"timestamp":416559507361,"id":64,"parentId":21,"tags":{},"startTime":1779224531754,"traceId":"e359de374d751faa"},{"name":"check-page","duration":657688,"timestamp":416559488461,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779224531735,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":647913,"timestamp":416559507946,"id":67,"parentId":26,"tags":{},"startTime":1779224531754,"traceId":"e359de374d751faa"},{"name":"check-page","duration":662337,"timestamp":416559493578,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779224531740,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":660907,"timestamp":416559509058,"id":81,"parentId":42,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":673411,"timestamp":416559496650,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779224531743,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":662369,"timestamp":416559509034,"id":79,"parentId":39,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":675319,"timestamp":416559496135,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779224531742,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":671400,"timestamp":416559509085,"id":83,"parentId":45,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":681605,"timestamp":416559498936,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779224531745,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":671741,"timestamp":416559508956,"id":76,"parentId":36,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":685097,"timestamp":416559495637,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779224531742,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":671781,"timestamp":416559509094,"id":84,"parentId":46,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":681841,"timestamp":416559499075,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779224531745,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":672311,"timestamp":416559508818,"id":73,"parentId":33,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":686411,"timestamp":416559494764,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779224531741,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":672217,"timestamp":416559509108,"id":85,"parentId":47,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":682164,"timestamp":416559499197,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779224531745,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":675819,"timestamp":416559508413,"id":70,"parentId":29,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":690293,"timestamp":416559493985,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779224531740,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":675728,"timestamp":416559514302,"id":91,"parentId":31,"tags":{},"startTime":1779224531761,"traceId":"e359de374d751faa"},{"name":"check-page","duration":695772,"timestamp":416559494304,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779224531741,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":678051,"timestamp":416559513208,"id":90,"parentId":24,"tags":{},"startTime":1779224531759,"traceId":"e359de374d751faa"},{"name":"check-page","duration":700586,"timestamp":416559490721,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779224531737,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":682697,"timestamp":416559509157,"id":89,"parentId":51,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":692211,"timestamp":416559499688,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779224531746,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":704964,"timestamp":416559509145,"id":88,"parentId":50,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":714599,"timestamp":416559499583,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779224531746,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":698001,"timestamp":416559516459,"id":93,"parentId":43,"tags":{},"startTime":1779224531763,"traceId":"e359de374d751faa"},{"name":"check-page","duration":717712,"timestamp":416559496802,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779224531743,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":705536,"timestamp":416559509130,"id":87,"parentId":49,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":715235,"timestamp":416559499464,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779224531746,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":732693,"timestamp":416559509121,"id":86,"parentId":48,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":742580,"timestamp":416559499308,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779224531746,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":738195,"timestamp":416559515065,"id":92,"parentId":41,"tags":{},"startTime":1779224531761,"traceId":"e359de374d751faa"},{"name":"check-page","duration":757024,"timestamp":416559496367,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779224531743,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":742881,"timestamp":416559518457,"id":94,"parentId":23,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":770986,"timestamp":416559490427,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779224531737,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":752382,"timestamp":416559518542,"id":100,"parentId":58,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":768900,"timestamp":416559502085,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779224531748,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":764599,"timestamp":416559518656,"id":101,"parentId":59,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":781009,"timestamp":416559502315,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779224531749,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":769761,"timestamp":416559518677,"id":102,"parentId":61,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":785450,"timestamp":416559503067,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779224531749,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":796223,"timestamp":416559509071,"id":82,"parentId":44,"tags":{},"startTime":1779224531755,"traceId":"e359de374d751faa"},{"name":"check-page","duration":806596,"timestamp":416559498762,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779224531745,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":787290,"timestamp":416559518690,"id":103,"parentId":62,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":802809,"timestamp":416559503234,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779224531750,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":789484,"timestamp":416559518502,"id":96,"parentId":53,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":807773,"timestamp":416559500295,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779224531747,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":795791,"timestamp":416559518487,"id":95,"parentId":52,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":814217,"timestamp":416559500107,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779224531746,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":796507,"timestamp":416559518698,"id":104,"parentId":63,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":811836,"timestamp":416559503416,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779224531750,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":797158,"timestamp":416559518511,"id":97,"parentId":54,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":815226,"timestamp":416559500497,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779224531747,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":787695,"timestamp":416559529613,"id":105,"parentId":60,"tags":{},"startTime":1779224531776,"traceId":"e359de374d751faa"},{"name":"check-page","duration":814823,"timestamp":416559502539,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779224531749,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":774793,"timestamp":416559543801,"id":106,"parentId":57,"tags":{},"startTime":1779224531790,"traceId":"e359de374d751faa"},{"name":"check-page","duration":817371,"timestamp":416559501263,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779224531748,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":815986,"timestamp":416559518522,"id":98,"parentId":55,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":833836,"timestamp":416559500733,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779224531747,"traceId":"e359de374d751faa"},{"name":"is-page-static","duration":835951,"timestamp":416559518534,"id":99,"parentId":56,"tags":{},"startTime":1779224531765,"traceId":"e359de374d751faa"},{"name":"check-page","duration":853565,"timestamp":416559500970,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779224531747,"traceId":"e359de374d751faa"},{"name":"static-check","duration":868960,"timestamp":416559485614,"id":19,"parentId":1,"tags":{},"startTime":1779224531732,"traceId":"e359de374d751faa"}]
2
- [{"name":"write-routes-manifest","duration":686,"timestamp":416560370163,"id":108,"parentId":1,"tags":{},"startTime":1779224532616,"traceId":"e359de374d751faa"},{"name":"load-dotenv","duration":74,"timestamp":416560389163,"id":111,"parentId":110,"tags":{},"startTime":1779224532635,"traceId":"e359de374d751faa"},{"name":"run-export-path-map","duration":912,"timestamp":416560392680,"id":112,"parentId":110,"tags":{},"startTime":1779224532639,"traceId":"e359de374d751faa"},{"name":"next-export","duration":653636,"timestamp":416560387220,"id":110,"parentId":1,"tags":{},"startTime":1779224532634,"traceId":"e359de374d751faa"},{"name":"move-exported-app-not-found-","duration":483,"timestamp":416561044022,"id":113,"parentId":109,"tags":{},"startTime":1779224533290,"traceId":"e359de374d751faa"},{"name":"move-exported-app-global-error-","duration":366,"timestamp":416561044595,"id":114,"parentId":109,"tags":{},"startTime":1779224533291,"traceId":"e359de374d751faa"},{"name":"static-generation","duration":670361,"timestamp":416560376289,"id":109,"parentId":1,"tags":{},"startTime":1779224532623,"traceId":"e359de374d751faa"},{"name":"write-routes-manifest","duration":378,"timestamp":416561046882,"id":115,"parentId":1,"tags":{},"startTime":1779224533293,"traceId":"e359de374d751faa"},{"name":"print-tree-view","duration":5928,"timestamp":416561054913,"id":116,"parentId":1,"tags":{},"startTime":1779224533301,"traceId":"e359de374d751faa"},{"name":"write-route-bundle-stats","duration":17998,"timestamp":416561060869,"id":117,"parentId":1,"tags":{},"startTime":1779224533307,"traceId":"e359de374d751faa"},{"name":"telemetry-flush","duration":21669,"timestamp":416561078906,"id":118,"parentId":1,"tags":{},"startTime":1779224533325,"traceId":"e359de374d751faa"},{"name":"next-build","duration":18560158,"timestamp":416542540473,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779224514787,"traceId":"e359de374d751faa"}]
1
+ [{"name":"generate-buildid","duration":351,"timestamp":417279326809,"id":4,"parentId":1,"tags":{},"startTime":1779225251573,"traceId":"8c20b6a221d98ca3"},{"name":"load-custom-routes","duration":495,"timestamp":417279327309,"id":5,"parentId":1,"tags":{},"startTime":1779225251574,"traceId":"8c20b6a221d98ca3"},{"name":"create-dist-dir","duration":721,"timestamp":417279327850,"id":6,"parentId":1,"tags":{},"startTime":1779225251574,"traceId":"8c20b6a221d98ca3"},{"name":"clean","duration":30412,"timestamp":417279329301,"id":7,"parentId":1,"tags":{},"startTime":1779225251576,"traceId":"8c20b6a221d98ca3"},{"name":"discover-routes","duration":8997,"timestamp":417279441307,"id":8,"parentId":1,"tags":{},"startTime":1779225251688,"traceId":"8c20b6a221d98ca3"},{"name":"create-root-mapping","duration":117,"timestamp":417279450381,"id":9,"parentId":1,"tags":{},"startTime":1779225251697,"traceId":"8c20b6a221d98ca3"},{"name":"generate-route-types","duration":24366,"timestamp":417279452968,"id":10,"parentId":1,"tags":{},"startTime":1779225251699,"traceId":"8c20b6a221d98ca3"},{"name":"public-dir-conflict-check","duration":132,"timestamp":417279477451,"id":11,"parentId":1,"tags":{},"startTime":1779225251724,"traceId":"8c20b6a221d98ca3"},{"name":"generate-routes-manifest","duration":5146,"timestamp":417279477750,"id":12,"parentId":1,"tags":{},"startTime":1779225251724,"traceId":"8c20b6a221d98ca3"},{"name":"run-turbopack","duration":6458281,"timestamp":417279502286,"id":14,"parentId":1,"tags":{},"startTime":1779225251749,"traceId":"8c20b6a221d98ca3"},{"name":"turbopack-build-events","duration":101,"timestamp":417279803566,"id":15,"parentId":1,"tags":{},"startTime":1779225252050,"traceId":"8c20b6a221d98ca3"},{"name":"run-typescript","duration":10663603,"timestamp":417285983210,"id":16,"parentId":1,"tags":{},"startTime":1779225258229,"traceId":"8c20b6a221d98ca3"},{"name":"generate-required-server-files","duration":7119,"timestamp":417296648432,"id":18,"parentId":1,"tags":{},"startTime":1779225268895,"traceId":"8c20b6a221d98ca3"},{"name":"check-static-error-page","duration":13560,"timestamp":417296885922,"id":20,"parentId":19,"tags":{},"startTime":1779225269132,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":508068,"timestamp":417296904560,"id":65,"parentId":22,"tags":{},"startTime":1779225269151,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":524384,"timestamp":417296888429,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779225269135,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":616142,"timestamp":417296904820,"id":67,"parentId":26,"tags":{},"startTime":1779225269151,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":630221,"timestamp":417296890872,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779225269137,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":627696,"timestamp":417296905789,"id":71,"parentId":30,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":642140,"timestamp":417296891432,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779225269138,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":630885,"timestamp":417296905631,"id":70,"parentId":29,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":645330,"timestamp":417296891261,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779225269138,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":646068,"timestamp":417296906047,"id":73,"parentId":33,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":660281,"timestamp":417296891968,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779225269138,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":646333,"timestamp":417296906133,"id":74,"parentId":34,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":663038,"timestamp":417296892115,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779225269138,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":652488,"timestamp":417296906158,"id":75,"parentId":35,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":666440,"timestamp":417296892264,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779225269139,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":657904,"timestamp":417296906204,"id":77,"parentId":37,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":671204,"timestamp":417296892964,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779225269139,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":662732,"timestamp":417296905852,"id":72,"parentId":32,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":676800,"timestamp":417296891834,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779225269138,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":664728,"timestamp":417296906219,"id":78,"parentId":38,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":678980,"timestamp":417296893129,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779225269139,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":672350,"timestamp":417296904108,"id":64,"parentId":21,"tags":{},"startTime":1779225269150,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":689194,"timestamp":417296887305,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779225269134,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":673389,"timestamp":417296906242,"id":80,"parentId":40,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":686343,"timestamp":417296893336,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779225269140,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":682234,"timestamp":417296906177,"id":76,"parentId":36,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":695700,"timestamp":417296892773,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779225269139,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":683975,"timestamp":417296905226,"id":68,"parentId":27,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":698261,"timestamp":417296890988,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779225269137,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":688356,"timestamp":417296906293,"id":84,"parentId":46,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":700368,"timestamp":417296894334,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779225269141,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":689570,"timestamp":417296906266,"id":82,"parentId":44,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":701773,"timestamp":417296894109,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779225269140,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":692706,"timestamp":417296906278,"id":83,"parentId":45,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":704836,"timestamp":417296894230,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779225269141,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":695070,"timestamp":417296906315,"id":86,"parentId":48,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":705327,"timestamp":417296896102,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779225269142,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":699206,"timestamp":417296906355,"id":88,"parentId":50,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":709250,"timestamp":417296896350,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779225269143,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":701807,"timestamp":417296906340,"id":87,"parentId":49,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":711949,"timestamp":417296896242,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779225269143,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":708328,"timestamp":417296906228,"id":79,"parentId":39,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":721381,"timestamp":417296893227,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779225269139,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":710036,"timestamp":417296909762,"id":90,"parentId":24,"tags":{},"startTime":1779225269156,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":731038,"timestamp":417296888811,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779225269135,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":716706,"timestamp":417296906365,"id":89,"parentId":51,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":726699,"timestamp":417296896427,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779225269143,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":713012,"timestamp":417296913605,"id":93,"parentId":43,"tags":{},"startTime":1779225269160,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":732848,"timestamp":417296893819,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779225269140,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":727331,"timestamp":417296910941,"id":91,"parentId":31,"tags":{},"startTime":1779225269157,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":746805,"timestamp":417296891559,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779225269138,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":732233,"timestamp":417296906306,"id":85,"parentId":47,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":742674,"timestamp":417296895909,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779225269142,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":726906,"timestamp":417296911846,"id":92,"parentId":41,"tags":{},"startTime":1779225269158,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":745369,"timestamp":417296893434,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779225269140,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":741267,"timestamp":417296906256,"id":81,"parentId":42,"tags":{},"startTime":1779225269153,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":753892,"timestamp":417296893687,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779225269140,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":753047,"timestamp":417296904710,"id":66,"parentId":25,"tags":{},"startTime":1779225269151,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":767135,"timestamp":417296890702,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779225269137,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":733756,"timestamp":417296925034,"id":98,"parentId":55,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":761588,"timestamp":417296897257,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779225269144,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":756564,"timestamp":417296925058,"id":100,"parentId":58,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":783533,"timestamp":417296898165,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779225269144,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":763777,"timestamp":417296924940,"id":94,"parentId":23,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":800154,"timestamp":417296888634,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779225269135,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":764943,"timestamp":417296925184,"id":101,"parentId":59,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":791845,"timestamp":417296898362,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779225269145,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":772712,"timestamp":417296925201,"id":102,"parentId":61,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":799056,"timestamp":417296898921,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779225269145,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":774755,"timestamp":417296925215,"id":103,"parentId":62,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":800967,"timestamp":417296899073,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779225269145,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":778982,"timestamp":417296925229,"id":104,"parentId":63,"tags":{},"startTime":1779225269172,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":805056,"timestamp":417296899217,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779225269145,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":782397,"timestamp":417296925245,"id":105,"parentId":60,"tags":{},"startTime":1779225269172,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":809164,"timestamp":417296898522,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779225269145,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":778726,"timestamp":417296938462,"id":106,"parentId":57,"tags":{},"startTime":1779225269185,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":819784,"timestamp":417296897654,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779225269144,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":815254,"timestamp":417296905361,"id":69,"parentId":28,"tags":{},"startTime":1779225269152,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":829530,"timestamp":417296891137,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779225269137,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":795986,"timestamp":417296924988,"id":96,"parentId":53,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":824143,"timestamp":417296896915,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779225269143,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":805220,"timestamp":417296924972,"id":95,"parentId":52,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":833487,"timestamp":417296896773,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779225269143,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":814437,"timestamp":417296925019,"id":97,"parentId":54,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":842448,"timestamp":417296897077,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779225269143,"traceId":"8c20b6a221d98ca3"},{"name":"is-page-static","duration":823331,"timestamp":417296925044,"id":99,"parentId":56,"tags":{},"startTime":1779225269171,"traceId":"8c20b6a221d98ca3"},{"name":"check-page","duration":850978,"timestamp":417296897450,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779225269144,"traceId":"8c20b6a221d98ca3"},{"name":"static-check","duration":863350,"timestamp":417296885114,"id":19,"parentId":1,"tags":{},"startTime":1779225269131,"traceId":"8c20b6a221d98ca3"}]
2
+ [{"name":"write-routes-manifest","duration":586,"timestamp":417297758359,"id":108,"parentId":1,"tags":{},"startTime":1779225270005,"traceId":"8c20b6a221d98ca3"},{"name":"load-dotenv","duration":56,"timestamp":417297769238,"id":111,"parentId":110,"tags":{},"startTime":1779225270016,"traceId":"8c20b6a221d98ca3"},{"name":"run-export-path-map","duration":581,"timestamp":417297772390,"id":112,"parentId":110,"tags":{},"startTime":1779225270019,"traceId":"8c20b6a221d98ca3"},{"name":"next-export","duration":642969,"timestamp":417297768029,"id":110,"parentId":1,"tags":{},"startTime":1779225270014,"traceId":"8c20b6a221d98ca3"},{"name":"move-exported-app-not-found-","duration":579,"timestamp":417298416050,"id":113,"parentId":109,"tags":{},"startTime":1779225270662,"traceId":"8c20b6a221d98ca3"},{"name":"move-exported-app-global-error-","duration":713,"timestamp":417298416717,"id":114,"parentId":109,"tags":{},"startTime":1779225270663,"traceId":"8c20b6a221d98ca3"},{"name":"static-generation","duration":656987,"timestamp":417297762576,"id":109,"parentId":1,"tags":{},"startTime":1779225270009,"traceId":"8c20b6a221d98ca3"},{"name":"write-routes-manifest","duration":400,"timestamp":417298419793,"id":115,"parentId":1,"tags":{},"startTime":1779225270666,"traceId":"8c20b6a221d98ca3"},{"name":"print-tree-view","duration":4722,"timestamp":417298429579,"id":116,"parentId":1,"tags":{},"startTime":1779225270676,"traceId":"8c20b6a221d98ca3"},{"name":"write-route-bundle-stats","duration":15946,"timestamp":417298434344,"id":117,"parentId":1,"tags":{},"startTime":1779225270681,"traceId":"8c20b6a221d98ca3"},{"name":"telemetry-flush","duration":24033,"timestamp":417298450328,"id":118,"parentId":1,"tags":{},"startTime":1779225270697,"traceId":"8c20b6a221d98ca3"},{"name":"next-build","duration":19196531,"timestamp":417279277864,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779225251524,"traceId":"8c20b6a221d98ca3"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6239139,"timestamp":416542791613,"id":14,"parentId":1,"tags":{},"startTime":1779224515038,"traceId":"e359de374d751faa"},{"name":"turbopack-build-events","duration":100,"timestamp":416543097879,"id":15,"parentId":1,"tags":{},"startTime":1779224515344,"traceId":"e359de374d751faa"},{"name":"run-typescript","duration":10257958,"timestamp":416549041426,"id":16,"parentId":1,"tags":{},"startTime":1779224521288,"traceId":"e359de374d751faa"},{"name":"static-check","duration":868960,"timestamp":416559485614,"id":19,"parentId":1,"tags":{},"startTime":1779224531732,"traceId":"e359de374d751faa"},{"name":"static-generation","duration":670361,"timestamp":416560376289,"id":109,"parentId":1,"tags":{},"startTime":1779224532623,"traceId":"e359de374d751faa"},{"name":"telemetry-flush","duration":21669,"timestamp":416561078906,"id":118,"parentId":1,"tags":{},"startTime":1779224533325,"traceId":"e359de374d751faa"},{"name":"next-build","duration":18560158,"timestamp":416542540473,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779224514787,"traceId":"e359de374d751faa"}]
1
+ [{"name":"run-turbopack","duration":6458281,"timestamp":417279502286,"id":14,"parentId":1,"tags":{},"startTime":1779225251749,"traceId":"8c20b6a221d98ca3"},{"name":"turbopack-build-events","duration":101,"timestamp":417279803566,"id":15,"parentId":1,"tags":{},"startTime":1779225252050,"traceId":"8c20b6a221d98ca3"},{"name":"run-typescript","duration":10663603,"timestamp":417285983210,"id":16,"parentId":1,"tags":{},"startTime":1779225258229,"traceId":"8c20b6a221d98ca3"},{"name":"static-check","duration":863350,"timestamp":417296885114,"id":19,"parentId":1,"tags":{},"startTime":1779225269131,"traceId":"8c20b6a221d98ca3"},{"name":"static-generation","duration":656987,"timestamp":417297762576,"id":109,"parentId":1,"tags":{},"startTime":1779225270009,"traceId":"8c20b6a221d98ca3"},{"name":"telemetry-flush","duration":24033,"timestamp":417298450328,"id":118,"parentId":1,"tags":{},"startTime":1779225270697,"traceId":"8c20b6a221d98ca3"},{"name":"next-build","duration":19196531,"timestamp":417279277864,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779225251524,"traceId":"8c20b6a221d98ca3"}]
@@ -4594,7 +4594,18 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
4594
4594
  <svg
4595
4595
  ref={svgRef}
4596
4596
  viewBox="0 0 1000 680"
4597
- className="w-full h-auto block"
4597
+ /* Round 740 / Loop — one-time canvas entrance animation.
4598
+ SVG scales 0.99 → 1 and opacity 0.8 → 1 over 600ms with
4599
+ ease-out on FIRST PAINT only (CSS keyframes animation
4600
+ runs once per mount, no `infinite` repeat). Pure visible
4601
+ entrance polish — distinct from breath, ambient, meta,
4602
+ and a11y threads. The class is conditional on
4603
+ !reducedMotion so users who prefer reduced motion see
4604
+ the canvas at its final state immediately. After 600ms
4605
+ the canvas sits at scale(1) opacity(1); subsequent
4606
+ paints don't replay. See globals.css R740 block. */
4607
+ className={`w-full h-auto block${reducedMotion ? '' : ' anet-topo-canvas-entrance'}`}
4608
+ data-topo-canvas-entrance={reducedMotion ? 'false' : 'true'}
4598
4609
  preserveAspectRatio="xMidYMid meet"
4599
4610
  aria-roledescription="agent network topology"
4600
4611
  aria-label={(() => {
@@ -5057,6 +5068,12 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5057
5068
  scoped). R737 test verifies anchor presence in the
5058
5069
  catalog regardless of the naming convention. */
5059
5070
  { name: "scan-beam-pair", cadences: [23, 30], anchors: ["scan beam horizontal", "scan beam vertical"], shape: "coprime-crosshair" },
5071
+ /* R739 — scan-beam-trio supersets the pair with the new
5072
+ diagonal beam. cadences [19, 23, 30] are pairwise
5073
+ coprime (19 prime, 23 prime, gcd(23,30)=1). Shape
5074
+ "coprime-trio": all 3 cadences mutually coprime,
5075
+ 3 sweep directions (horizontal, vertical, diagonal). */
5076
+ { name: "scan-beam-trio", cadences: [19, 23, 30], anchors: ["scan beam horizontal", "scan beam vertical", "scan beam diagonal"], shape: "coprime-trio" },
5060
5077
  ])}
5061
5078
  /* Round 720 / Loop — 4TH orthogonal meta-doc catalog: tiers.
5062
5079
  Joins R710 (cadences) + R716 (axes) + R717 (patterns) to
@@ -5183,31 +5200,20 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5183
5200
  cross-family `scan-beam-pair` entry. triple_axis_pairs
5184
5201
  and triple_axis_solos stay unchanged (the new pattern
5185
5202
  isn't triple-axis). */
5186
- patterns_count: 9,
5203
+ /* R739 — patterns_count bumped 9 → 10 to admit the new
5204
+ cross-family `scan-beam-trio` entry. ambient family
5205
+ grows: ambient_patterns 1 → 2 (pair + trio coexist),
5206
+ ambient_cadences 2 → 3 (added 19s for diagonal beam),
5207
+ scan_beam_pairs stays 1 (pair pattern unchanged). */
5208
+ patterns_count: 10,
5187
5209
  tiers_count: 7,
5188
5210
  triple_axis_pairs: 2,
5189
5211
  triple_axis_solos: 2,
5190
- /* Round 738 / Loop — cross-family awareness fields.
5191
- R737 made R717 patterns catalog cross-family for the
5192
- first time (8 breath + 1 ambient = 9 entries). R738
5193
- surfaces that split as queryable stats:
5194
- breath_patterns 8 entries (R717 minus scan-beam-pair)
5195
- ambient_patterns 1 entry (just scan-beam-pair today)
5196
- pattern_families 2 (breath ∪ ambient)
5197
- scan_beam_pairs 1 (R735 + R736 = 1 pair instance)
5198
- ambient_cadences 2 (23 + 30 — the scan-beam coprime pair)
5199
- Cross-check invariant (R738 test):
5200
- breath_patterns + ambient_patterns === patterns_count
5201
- pattern_families === |distinct families in R717 entries|
5202
- scan_beam_pairs maps to (R717 entries named "scan-beam-*").length
5203
- Each new field is derivable from existing catalogs but
5204
- surfaced here for tooling that wants a single stats
5205
- snapshot of the cross-family layer. */
5206
5212
  breath_patterns: 8,
5207
- ambient_patterns: 1,
5213
+ ambient_patterns: 2,
5208
5214
  pattern_families: 2,
5209
5215
  scan_beam_pairs: 1,
5210
- ambient_cadences: 2,
5216
+ ambient_cadences: 3,
5211
5217
  })}
5212
5218
  /* Round 732 / Loop — 7TH orthogonal meta-doc catalog: a11y
5213
5219
  titles. R730/R731 added SVG <title> children to 5 decorative
@@ -5245,6 +5251,8 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5245
5251
  /* R736 — vertical scan beam companion to R735. Coprime
5246
5252
  cadence (23s) with R735 (30s) — ambient crosshair drift. */
5247
5253
  { surface: "canvas scan beam vertical", selector: "[data-topo-canvas-scan-beam-vertical]", accessible_name: "canvas scan beam vertical · ambient sweep · 23s cycle" },
5254
+ /* R739 — diagonal scan beam, completes ambient trio. */
5255
+ { surface: "canvas scan beam diagonal", selector: "[data-topo-canvas-scan-beam-diagonal]", accessible_name: "canvas scan beam diagonal · ambient sweep · 19s cycle" },
5248
5256
  ])}
5249
5257
  data-topo-pinned-aspect={(() => {
5250
5258
  const aspects: string[] = [];
@@ -5514,6 +5522,50 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5514
5522
  <title>canvas scan beam vertical · ambient sweep · 23s cycle</title>
5515
5523
  </rect>
5516
5524
 
5525
+ {/* Round 739 / Loop — diagonal scan beam, 3rd member of the
5526
+ ambient scan beam family. Sweeps a short 45° line segment
5527
+ from upper-left → lower-right across the canvas every 19s.
5528
+ Coprime with both existing beams: gcd(19, 23) = 1 and
5529
+ gcd(19, 30) = 1 (19 is prime, never shares factors).
5530
+ The 3-element family now spans:
5531
+ R735 horizontal beam 30 s (top → bottom)
5532
+ R736 vertical beam 23 s (left → right)
5533
+ R739 diagonal beam 19 s (NW → SE) ← this round
5534
+ 19 < 23 < 30 → cadence ladder ascending with the
5535
+ dimensionality (1D horizontal/vertical → 2D diagonal); the
5536
+ diagonal as the fastest fits — it has 2× the displacement
5537
+ distance (sqrt(2) factor) so faster cadence keeps the
5538
+ perceived sweep velocity comparable across all 3 beams.
5539
+
5540
+ Geometry: <line> with 4 synchronized SMIL <animate>
5541
+ children on x1/y1/x2/y2 endpoints. The line is ~100 px
5542
+ long (sqrt(70² + 70²)) and stays at constant 45° angle
5543
+ throughout the sweep. Starts off-canvas at (-100, -100)
5544
+ → (-30, -30), ends off-canvas at (1100, 780) → (1170, 850).
5545
+ Same opacity ramp pattern as R735/R736 (max 0.06 — slightly
5546
+ dimmer than the orthogonal pair because the diagonal
5547
+ traverses the full diagonal of the canvas rather than
5548
+ one orthogonal axis, so per-pixel exposure is higher).
5549
+
5550
+ Same z-order rules (background layer, before nodes),
5551
+ same reducedMotion JSX gate, same overlap-test safety
5552
+ by selector exclusion. Same canonical 3-part a11y title. */}
5553
+ <line
5554
+ x1="-100" y1="-100" x2="-30" y2="-30"
5555
+ stroke={pal.legendAccent} strokeWidth="1"
5556
+ opacity="0"
5557
+ data-topo-canvas-scan-beam-diagonal
5558
+ data-topo-canvas-scan-beam-diagonal-active={!reducedMotion ? 'true' : 'false'}
5559
+ style={{ pointerEvents: 'none' }}
5560
+ >
5561
+ {!reducedMotion && (<animate attributeName="x1" values="-100;1100;-100" dur="19s" repeatCount="indefinite" />)}
5562
+ {!reducedMotion && (<animate attributeName="y1" values="-100;780;-100" dur="19s" repeatCount="indefinite" />)}
5563
+ {!reducedMotion && (<animate attributeName="x2" values="-30;1170;-30" dur="19s" repeatCount="indefinite" />)}
5564
+ {!reducedMotion && (<animate attributeName="y2" values="-30;850;-30" dur="19s" repeatCount="indefinite" />)}
5565
+ {!reducedMotion && (<animate attributeName="opacity" values="0;0.06;0.06;0" keyTimes="0;0.05;0.95;1" dur="19s" repeatCount="indefinite" />)}
5566
+ <title>canvas scan beam diagonal · ambient sweep · 19s cycle</title>
5567
+ </line>
5568
+
5517
5569
  {/* Round 103 (issue #81): everything inside this <g> zooms + pans
5518
5570
  together. transform order = translate then scale.
5519
5571
  Round 168 / Loop: smoothView arms a one-shot transition on
package/app/globals.css CHANGED
@@ -1311,6 +1311,39 @@ body {
1311
1311
  transform-origin defaults to center — kicker scales around its own
1312
1312
  midpoint, no glyph drift. paint-only → flex parent stable → topo-
1313
1313
  overlap-test untouched. prefers-reduced-motion: reduce neutralizes. */
1314
+ /* Round 740 — one-time canvas entrance animation. Plays on FIRST PAINT
1315
+ only, then the canvas sits at scale(1) opacity(1) for the rest of
1316
+ the session. Distinct from all prior animation families:
1317
+ - breath family (R699+) is rest-axis infinite
1318
+ - ambient family (R735+) is sweep-axis infinite
1319
+ - R740 entrance is ONE-SHOT (no `infinite` keyword) — plays once
1320
+ Subsequent re-mounts (route changes, etc.) replay the animation —
1321
+ intended as a "the canvas just arrived" signal to the user.
1322
+
1323
+ Animation: 0% scale(0.99) opacity(0.8) → 100% scale(1) opacity(1)
1324
+ over 600ms with ease-out timing. Subtle: the scale change is only
1325
+ 1% (0.99 → 1.00); opacity ramps from 0.8 to 1.0. Reads as "settling
1326
+ in" — the canvas zooms in slightly while fading in.
1327
+
1328
+ transform-origin defaults to 50% 50% (canvas center), so the scale
1329
+ ripple comes from the middle outward.
1330
+
1331
+ prefers-reduced-motion guard: when reduced motion is preferred, the
1332
+ class isn't applied (JSX-level gate in TopoGraph.tsx), so the CSS
1333
+ animation never runs. Belt-and-suspenders @media block below
1334
+ neutralises if the class somehow ends up applied. */
1335
+ @keyframes anet-topo-canvas-entrance-kf {
1336
+ 0% { transform: scale(0.99); opacity: 0.8; }
1337
+ 100% { transform: scale(1); opacity: 1; }
1338
+ }
1339
+ .anet-topo-canvas-entrance {
1340
+ animation: anet-topo-canvas-entrance-kf 600ms ease-out;
1341
+ transform-origin: 50% 50%;
1342
+ }
1343
+ @media (prefers-reduced-motion: reduce) {
1344
+ .anet-topo-canvas-entrance { animation: none; }
1345
+ }
1346
+
1314
1347
  /* Round 728 — recent + legend panel titles join the triple-axis tier
1315
1348
  at 8 s, forming the "8 s triple-axis PAIR" (mirror to R724's 6 s pair).
1316
1349
  Both panel titles already share R700/R701 SMIL opacity (8 s) +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.252",
3
+ "version": "0.5.3-preview.254",
4
4
  "description": "Agent Network Dashboard \u2014 Web UI for managing AI Agent networks",
5
5
  "scripts": {
6
6
  "dev": "next dev",
@@ -108,7 +108,7 @@ const validShape = Array.isArray(catalog) && catalog.every(e =>
108
108
  const canonicalFormat = (s) => typeof s === 'string' && /^[^·]+( · [^·]+)+$/.test(s);
109
109
  const allCanonical = Array.isArray(catalog) && catalog.every(e => canonicalFormat(e.accessible_name));
110
110
 
111
- const expectedSurfaces = ['canvas scan beam', 'canvas scan beam vertical', 'canvas-corner crescent', 'hub-highlight disc', 'legend panel title', 'recent panel title', 'title-block brand logo', 'watermark text'];
111
+ const expectedSurfaces = ['canvas scan beam', 'canvas scan beam diagonal', 'canvas scan beam vertical', 'canvas-corner crescent', 'hub-highlight disc', 'legend panel title', 'recent panel title', 'title-block brand logo', 'watermark text'];
112
112
  const actualSurfaces = Array.isArray(catalog) ? catalog.map(e => e.surface).sort() : [];
113
113
  const surfacesMatch = JSON.stringify(actualSurfaces) === JSON.stringify(expectedSurfaces);
114
114
 
@@ -118,7 +118,7 @@ const results = {
118
118
  attr_present: !!result.catalogAttr,
119
119
  json_parses: catalog !== null,
120
120
  is_array: Array.isArray(catalog),
121
- has_8_entries: Array.isArray(catalog) && catalog.length === 8,
121
+ has_9_entries: Array.isArray(catalog) && catalog.length === 9,
122
122
  shape_valid: validShape,
123
123
  all_accessible_names_canonical: allCanonical,
124
124
  surfaces_match_expected_set: surfacesMatch,
@@ -0,0 +1,117 @@
1
+ /* Round 740 — one-time canvas entrance animation. Plays on first
2
+ * paint, then the canvas sits at scale(1) opacity(1) for the rest of
3
+ * the session. Distinct from breath (infinite rest-axis) and ambient
4
+ * (infinite sweep-axis) — R740 is ONE-SHOT.
5
+ *
6
+ * Assertions:
7
+ * - .anet-topo-canvas-entrance class on root <svg> (reducedMotion off)
8
+ * - data-topo-canvas-entrance="true" attribute
9
+ * - CSS @keyframes 0% scale(0.99) opacity 0.8 → 100% scale(1) opacity 1
10
+ * - .anet-topo-canvas-entrance binds 600ms ease-out animation
11
+ * - CSS animation NOT infinite (no `infinite` keyword) — one-shot
12
+ * - transform-origin: 50% 50%
13
+ * - prefers-reduced-motion guard present
14
+ * - Animation completes within ~1s (test waits 1.2s after mount,
15
+ * then verifies computed transform is identity matrix)
16
+ * - Existing canvas className tokens (w-full h-auto block) preserved
17
+ */
18
+ import { chromium } from 'playwright';
19
+ import { readFileSync } from 'node:fs';
20
+
21
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
22
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
23
+
24
+ const browser = await chromium.launch({ headless: true });
25
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
26
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
27
+ await ctx.addInitScript(() => {
28
+ try {
29
+ localStorage.setItem('anet-theme', 'cyber');
30
+ localStorage.setItem('anet-topo-layout', 'ring');
31
+ sessionStorage.setItem('anet_v3_auth', '1');
32
+ } catch {}
33
+ });
34
+ await ctx.route('**/api/hub/status*', async (route) => {
35
+ const r = await route.fetch();
36
+ const b = await r.json();
37
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
38
+ const mk = (alias) => ({
39
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
40
+ network_id: nid, project_dir: null,
41
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
42
+ });
43
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
44
+ });
45
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
46
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
47
+ const page = await ctx.newPage();
48
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
49
+ await page.waitForSelector('[data-topo-canvas-aria]', { timeout: 15000, state: 'attached' });
50
+
51
+ /* Wait past the 600ms animation duration so computed transform settles
52
+ * to the final state (scale(1)). */
53
+ await page.waitForTimeout(1200);
54
+
55
+ const state = await page.evaluate(() => {
56
+ const svg = document.querySelector('[data-topo-canvas-aria]');
57
+ if (!svg) return null;
58
+ const cs = getComputedStyle(svg);
59
+ return {
60
+ has_entrance_class: svg.classList.contains('anet-topo-canvas-entrance'),
61
+ entrance_attr: svg.getAttribute('data-topo-canvas-entrance'),
62
+ class_attr: svg.getAttribute('class'),
63
+ anim_name: cs.animationName,
64
+ anim_duration: cs.animationDuration,
65
+ anim_iteration: cs.animationIterationCount,
66
+ transform_origin: cs.transformOrigin,
67
+ computed_transform: cs.transform,
68
+ computed_opacity: cs.opacity,
69
+ };
70
+ });
71
+
72
+ await browser.close();
73
+
74
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
75
+ const cssKfStart = /@keyframes anet-topo-canvas-entrance-kf\s*\{[\s\S]*?0%\s*\{[\s\S]*?transform:\s*scale\(0\.99\)[\s\S]*?opacity:\s*0\.8/.test(cssSrc);
76
+ const cssKfEnd = /@keyframes anet-topo-canvas-entrance-kf\s*\{[\s\S]*?100%\s*\{[\s\S]*?transform:\s*scale\(1\)[\s\S]*?opacity:\s*1/.test(cssSrc);
77
+ const cssClassBound = /\.anet-topo-canvas-entrance\s*\{[\s\S]*?animation:\s*anet-topo-canvas-entrance-kf\s+600ms\s+ease-out/.test(cssSrc);
78
+ /* The CSS source regex was too broad (matched `infinite` in OTHER
79
+ * class blocks past this one). Verify one-shot directly via the
80
+ * runtime computed animation-iteration-count — this is the property
81
+ * that actually determines whether the animation replays. */
82
+ const runtimeOneShot = state?.anim_iteration === '1';
83
+ const cssTransformOrigin = /\.anet-topo-canvas-entrance\s*\{[\s\S]*?transform-origin:\s*50%\s+50%/.test(cssSrc);
84
+ const cssReducedMotion = /@media\s*\(prefers-reduced-motion:\s*reduce\)\s*\{[\s\S]*?\.anet-topo-canvas-entrance\s*\{\s*animation:\s*none/.test(cssSrc);
85
+
86
+ /* After 1.2s the animation should have completed; computed transform
87
+ * should be identity-matrix (scale 1). matrix(1, 0, 0, 1, 0, 0) === 'none'
88
+ * in some browsers; accept either. */
89
+ const transformSettled = state?.computed_transform === 'none'
90
+ || state?.computed_transform === 'matrix(1, 0, 0, 1, 0, 0)';
91
+
92
+ const opacitySettled = parseFloat(state?.computed_opacity ?? '0') > 0.99;
93
+
94
+ const classKept = typeof state?.class_attr === 'string'
95
+ && state.class_attr.includes('w-full')
96
+ && state.class_attr.includes('h-auto')
97
+ && state.class_attr.includes('block')
98
+ && state.class_attr.includes('anet-topo-canvas-entrance');
99
+
100
+ const results = {
101
+ has_entrance_class: state?.has_entrance_class === true,
102
+ entrance_attr_true: state?.entrance_attr === 'true',
103
+ original_classes_preserved: classKept,
104
+ css_keyframe_start: cssKfStart,
105
+ css_keyframe_end: cssKfEnd,
106
+ css_class_binds_600ms_ease_out: cssClassBound,
107
+ runtime_animation_one_shot: runtimeOneShot,
108
+ css_transform_origin_center: cssTransformOrigin,
109
+ css_reduced_motion_guard: cssReducedMotion,
110
+ transform_settled_to_identity: transformSettled,
111
+ opacity_settled_to_1: opacitySettled,
112
+ };
113
+ const ok = Object.values(results).every(Boolean);
114
+ console.log(`${ok ? '✅' : '❌'} R740 one-time canvas entrance animation (scale 0.99→1 + opacity 0.8→1 @ 600ms ease-out, one-shot):`,
115
+ JSON.stringify(results, null, 2),
116
+ `\n state: ${JSON.stringify(state)}`);
117
+ process.exit(ok ? 0 : 1);