@sleep2agi/agent-network-dashboard 0.5.3-preview.248 → 0.5.3-preview.250

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 (144) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +5 -5
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found.html +1 -1
  13. package/.next/server/app/_not-found.rsc +1 -1
  14. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/admin.html +1 -1
  21. package/.next/server/app/admin.rsc +1 -1
  22. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  23. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  28. package/.next/server/app/index.html +2 -2
  29. package/.next/server/app/index.rsc +2 -2
  30. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  31. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  35. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/login.html +2 -2
  37. package/.next/server/app/login.rsc +2 -2
  38. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  39. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  40. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  44. package/.next/server/app/logs.html +1 -1
  45. package/.next/server/app/logs.rsc +1 -1
  46. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  52. package/.next/server/app/messages.html +1 -1
  53. package/.next/server/app/messages.rsc +1 -1
  54. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  60. package/.next/server/app/node.html +1 -1
  61. package/.next/server/app/node.rsc +1 -1
  62. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  63. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  68. package/.next/server/app/nodes.html +1 -1
  69. package/.next/server/app/nodes.rsc +1 -1
  70. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  76. package/.next/server/app/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/server-logs.html +1 -1
  78. package/.next/server/app/server-logs.rsc +1 -1
  79. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  85. package/.next/server/app/settings/networks.html +1 -1
  86. package/.next/server/app/settings/networks.rsc +1 -1
  87. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  94. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/settings/tokens.html +1 -1
  96. package/.next/server/app/settings/tokens.rsc +1 -1
  97. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  104. package/.next/server/app/settings.html +2 -2
  105. package/.next/server/app/settings.rsc +2 -2
  106. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  111. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  112. package/.next/server/app/tasks.html +1 -1
  113. package/.next/server/app/tasks.rsc +1 -1
  114. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  120. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  121. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  126. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  127. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  128. package/.next/server/middleware-build-manifest.js +3 -3
  129. package/.next/server/pages/404.html +1 -1
  130. package/.next/server/pages/500.html +1 -1
  131. package/.next/static/chunks/{13vxyg9~ykurt.js → 08ji.uwuoarfk.js} +1 -1
  132. package/.next/static/chunks/{14lnrrg05z73_.js → 0_xgl9bojufz_.js} +1 -1
  133. package/.next/static/chunks/{0t0t4r1u_qyma.js → 0nqpzd1cr4r.o.js} +1 -1
  134. package/.next/static/chunks/{0adnbw9pxq48g.js → 0vwtd01emh18f.js} +1 -1
  135. package/.next/trace +2 -2
  136. package/.next/trace-build +1 -1
  137. package/app/components/TopoGraph.tsx +81 -0
  138. package/package.json +1 -1
  139. package/scripts/topo-a11y-titles-catalog-test.mjs +2 -2
  140. package/scripts/topo-canvas-scan-beam-test.mjs +109 -0
  141. package/scripts/topo-canvas-scan-beam-vertical-test.mjs +123 -0
  142. /package/.next/static/{H3NkUl5CCgWLQJefNFcti → 6qR4_SAKJUTsF7Nxr9Rvr}/_buildManifest.js +0 -0
  143. /package/.next/static/{H3NkUl5CCgWLQJefNFcti → 6qR4_SAKJUTsF7Nxr9Rvr}/_clientMiddlewareManifest.js +0 -0
  144. /package/.next/static/{H3NkUl5CCgWLQJefNFcti → 6qR4_SAKJUTsF7Nxr9Rvr}/_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.247"],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.249"],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":344,"timestamp":415249569329,"id":4,"parentId":1,"tags":{},"startTime":1779223221816,"traceId":"a812cc422b85a022"},{"name":"load-custom-routes","duration":682,"timestamp":415249569869,"id":5,"parentId":1,"tags":{},"startTime":1779223221816,"traceId":"a812cc422b85a022"},{"name":"create-dist-dir","duration":828,"timestamp":415249570599,"id":6,"parentId":1,"tags":{},"startTime":1779223221817,"traceId":"a812cc422b85a022"},{"name":"clean","duration":33373,"timestamp":415249572237,"id":7,"parentId":1,"tags":{},"startTime":1779223221819,"traceId":"a812cc422b85a022"},{"name":"discover-routes","duration":32493,"timestamp":415249695922,"id":8,"parentId":1,"tags":{},"startTime":1779223221942,"traceId":"a812cc422b85a022"},{"name":"create-root-mapping","duration":122,"timestamp":415249728491,"id":9,"parentId":1,"tags":{},"startTime":1779223221975,"traceId":"a812cc422b85a022"},{"name":"generate-route-types","duration":26214,"timestamp":415249731835,"id":10,"parentId":1,"tags":{},"startTime":1779223221978,"traceId":"a812cc422b85a022"},{"name":"public-dir-conflict-check","duration":108,"timestamp":415249758156,"id":11,"parentId":1,"tags":{},"startTime":1779223222004,"traceId":"a812cc422b85a022"},{"name":"generate-routes-manifest","duration":4559,"timestamp":415249758406,"id":12,"parentId":1,"tags":{},"startTime":1779223222005,"traceId":"a812cc422b85a022"},{"name":"run-turbopack","duration":6590231,"timestamp":415249768093,"id":14,"parentId":1,"tags":{},"startTime":1779223222014,"traceId":"a812cc422b85a022"},{"name":"turbopack-build-events","duration":81,"timestamp":415250095746,"id":15,"parentId":1,"tags":{},"startTime":1779223222342,"traceId":"a812cc422b85a022"},{"name":"run-typescript","duration":10224688,"timestamp":415256381728,"id":16,"parentId":1,"tags":{},"startTime":1779223228628,"traceId":"a812cc422b85a022"},{"name":"generate-required-server-files","duration":2507,"timestamp":415266607767,"id":18,"parentId":1,"tags":{},"startTime":1779223238854,"traceId":"a812cc422b85a022"},{"name":"check-static-error-page","duration":13577,"timestamp":415266814331,"id":20,"parentId":19,"tags":{},"startTime":1779223239061,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":524494,"timestamp":415266832068,"id":65,"parentId":22,"tags":{},"startTime":1779223239078,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":539367,"timestamp":415266817364,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779223239064,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":561458,"timestamp":415266832577,"id":69,"parentId":28,"tags":{},"startTime":1779223239079,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":573546,"timestamp":415266820608,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779223239067,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":568265,"timestamp":415266833066,"id":72,"parentId":32,"tags":{},"startTime":1779223239079,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":580322,"timestamp":415266821111,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779223239067,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":593847,"timestamp":415266832335,"id":67,"parentId":26,"tags":{},"startTime":1779223239079,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":605927,"timestamp":415266820340,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779223239067,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":593235,"timestamp":415266833231,"id":73,"parentId":33,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":605268,"timestamp":415266821248,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779223239068,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":618698,"timestamp":415266833333,"id":75,"parentId":35,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":630734,"timestamp":415266821528,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779223239068,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":619236,"timestamp":415266833307,"id":74,"parentId":34,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":631210,"timestamp":415266821388,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779223239068,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":625906,"timestamp":415266833398,"id":77,"parentId":37,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":637167,"timestamp":415266822212,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779223239068,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":632288,"timestamp":415266833410,"id":78,"parentId":38,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":643462,"timestamp":415266822311,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":637407,"timestamp":415266833367,"id":76,"parentId":36,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":648777,"timestamp":415266822048,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779223239068,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":648724,"timestamp":415266833520,"id":80,"parentId":40,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":659865,"timestamp":415266822453,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":649851,"timestamp":415266832838,"id":70,"parentId":29,"tags":{},"startTime":1779223239079,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":662032,"timestamp":415266820698,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779223239067,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":649919,"timestamp":415266832988,"id":71,"parentId":30,"tags":{},"startTime":1779223239079,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":662144,"timestamp":415266820795,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779223239067,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":653747,"timestamp":415266832219,"id":66,"parentId":25,"tags":{},"startTime":1779223239078,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":665859,"timestamp":415266820170,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779223239066,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":654723,"timestamp":415266833503,"id":79,"parentId":39,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":665883,"timestamp":415266822388,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":658460,"timestamp":415266833569,"id":84,"parentId":46,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":667526,"timestamp":415266824552,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779223239071,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":659403,"timestamp":415266833578,"id":85,"parentId":47,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":668367,"timestamp":415266824686,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779223239071,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":667508,"timestamp":415266833603,"id":87,"parentId":49,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":676317,"timestamp":415266824844,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779223239071,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":667745,"timestamp":415266833556,"id":83,"parentId":45,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":678183,"timestamp":415266823144,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":670363,"timestamp":415266833617,"id":88,"parentId":50,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":679138,"timestamp":415266824905,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779223239071,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":673107,"timestamp":415266831636,"id":64,"parentId":21,"tags":{},"startTime":1779223239078,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":688713,"timestamp":415266816069,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779223239062,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":668274,"timestamp":415266842608,"id":90,"parentId":24,"tags":{},"startTime":1779223239089,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":693112,"timestamp":415266817814,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779223239064,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":686967,"timestamp":415266833532,"id":81,"parentId":42,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":697869,"timestamp":415266822704,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":687162,"timestamp":415266833590,"id":86,"parentId":48,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":696024,"timestamp":415266824759,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779223239071,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":688130,"timestamp":415266833541,"id":82,"parentId":44,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":698700,"timestamp":415266823011,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":682862,"timestamp":415266846208,"id":92,"parentId":41,"tags":{},"startTime":1779223239092,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":706606,"timestamp":415266822514,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":695648,"timestamp":415266833626,"id":89,"parentId":51,"tags":{},"startTime":1779223239080,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":704327,"timestamp":415266824981,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779223239071,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":682040,"timestamp":415266847397,"id":93,"parentId":43,"tags":{},"startTime":1779223239094,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":706668,"timestamp":415266822796,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779223239069,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":717036,"timestamp":415266832462,"id":68,"parentId":27,"tags":{},"startTime":1779223239079,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":729095,"timestamp":415266820480,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779223239067,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":697660,"timestamp":415266890418,"id":96,"parentId":53,"tags":{},"startTime":1779223239137,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":762697,"timestamp":415266825457,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779223239072,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":744847,"timestamp":415266845330,"id":91,"parentId":31,"tags":{},"startTime":1779223239092,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":769367,"timestamp":415266820878,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779223239067,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":705165,"timestamp":415266890403,"id":95,"parentId":52,"tags":{},"startTime":1779223239137,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":770295,"timestamp":415266825330,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779223239072,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":706232,"timestamp":415266890467,"id":100,"parentId":58,"tags":{},"startTime":1779223239137,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":770237,"timestamp":415266826528,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779223239073,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":707015,"timestamp":415266890427,"id":97,"parentId":54,"tags":{},"startTime":1779223239137,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":771923,"timestamp":415266825560,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779223239072,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":709625,"timestamp":415266890440,"id":98,"parentId":55,"tags":{},"startTime":1779223239137,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":774424,"timestamp":415266825693,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779223239072,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":710770,"timestamp":415266892931,"id":102,"parentId":61,"tags":{},"startTime":1779223239139,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":776609,"timestamp":415266827134,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779223239073,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":712729,"timestamp":415266892953,"id":104,"parentId":63,"tags":{},"startTime":1779223239139,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":778407,"timestamp":415266827447,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779223239074,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":717844,"timestamp":415266890337,"id":94,"parentId":23,"tags":{},"startTime":1779223239137,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":790610,"timestamp":415266817610,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779223239064,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":715470,"timestamp":415266892944,"id":103,"parentId":62,"tags":{},"startTime":1779223239139,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":781182,"timestamp":415266827272,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779223239074,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":715681,"timestamp":415266892967,"id":105,"parentId":57,"tags":{},"startTime":1779223239139,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":782699,"timestamp":415266825986,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779223239072,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":704015,"timestamp":415266906956,"id":106,"parentId":60,"tags":{},"startTime":1779223239153,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":784264,"timestamp":415266826826,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779223239073,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":720967,"timestamp":415266892880,"id":101,"parentId":59,"tags":{},"startTime":1779223239139,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":787176,"timestamp":415266826701,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779223239073,"traceId":"a812cc422b85a022"},{"name":"is-page-static","duration":743248,"timestamp":415266890454,"id":99,"parentId":56,"tags":{},"startTime":1779223239137,"traceId":"a812cc422b85a022"},{"name":"check-page","duration":807914,"timestamp":415266825829,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779223239072,"traceId":"a812cc422b85a022"},{"name":"static-check","duration":820501,"timestamp":415266813287,"id":19,"parentId":1,"tags":{},"startTime":1779223239060,"traceId":"a812cc422b85a022"}]
2
- [{"name":"write-routes-manifest","duration":507,"timestamp":415267643615,"id":108,"parentId":1,"tags":{},"startTime":1779223239890,"traceId":"a812cc422b85a022"},{"name":"load-dotenv","duration":49,"timestamp":415267655562,"id":111,"parentId":110,"tags":{},"startTime":1779223239902,"traceId":"a812cc422b85a022"},{"name":"run-export-path-map","duration":505,"timestamp":415267658458,"id":112,"parentId":110,"tags":{},"startTime":1779223239905,"traceId":"a812cc422b85a022"},{"name":"next-export","duration":668173,"timestamp":415267654362,"id":110,"parentId":1,"tags":{},"startTime":1779223239901,"traceId":"a812cc422b85a022"},{"name":"move-exported-app-not-found-","duration":578,"timestamp":415268327231,"id":113,"parentId":109,"tags":{},"startTime":1779223240574,"traceId":"a812cc422b85a022"},{"name":"move-exported-app-global-error-","duration":476,"timestamp":415268327905,"id":114,"parentId":109,"tags":{},"startTime":1779223240574,"traceId":"a812cc422b85a022"},{"name":"static-generation","duration":682692,"timestamp":415267647955,"id":109,"parentId":1,"tags":{},"startTime":1779223239894,"traceId":"a812cc422b85a022"},{"name":"write-routes-manifest","duration":512,"timestamp":415268330950,"id":115,"parentId":1,"tags":{},"startTime":1779223240577,"traceId":"a812cc422b85a022"},{"name":"print-tree-view","duration":3704,"timestamp":415268349681,"id":116,"parentId":1,"tags":{},"startTime":1779223240596,"traceId":"a812cc422b85a022"},{"name":"write-route-bundle-stats","duration":13003,"timestamp":415268353419,"id":117,"parentId":1,"tags":{},"startTime":1779223240600,"traceId":"a812cc422b85a022"},{"name":"telemetry-flush","duration":33778,"timestamp":415268366454,"id":118,"parentId":1,"tags":{},"startTime":1779223240613,"traceId":"a812cc422b85a022"},{"name":"next-build","duration":18883552,"timestamp":415249516713,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779223221763,"traceId":"a812cc422b85a022"}]
1
+ [{"name":"generate-buildid","duration":301,"timestamp":415876944961,"id":4,"parentId":1,"tags":{},"startTime":1779223849191,"traceId":"912c13d76cb327e2"},{"name":"load-custom-routes","duration":475,"timestamp":415876945416,"id":5,"parentId":1,"tags":{},"startTime":1779223849192,"traceId":"912c13d76cb327e2"},{"name":"create-dist-dir","duration":695,"timestamp":415876945937,"id":6,"parentId":1,"tags":{},"startTime":1779223849192,"traceId":"912c13d76cb327e2"},{"name":"clean","duration":33084,"timestamp":415876947311,"id":7,"parentId":1,"tags":{},"startTime":1779223849194,"traceId":"912c13d76cb327e2"},{"name":"discover-routes","duration":11155,"timestamp":415877064523,"id":8,"parentId":1,"tags":{},"startTime":1779223849311,"traceId":"912c13d76cb327e2"},{"name":"create-root-mapping","duration":169,"timestamp":415877075767,"id":9,"parentId":1,"tags":{},"startTime":1779223849322,"traceId":"912c13d76cb327e2"},{"name":"generate-route-types","duration":42071,"timestamp":415877078707,"id":10,"parentId":1,"tags":{},"startTime":1779223849325,"traceId":"912c13d76cb327e2"},{"name":"public-dir-conflict-check","duration":103,"timestamp":415877120873,"id":11,"parentId":1,"tags":{},"startTime":1779223849367,"traceId":"912c13d76cb327e2"},{"name":"generate-routes-manifest","duration":5626,"timestamp":415877121126,"id":12,"parentId":1,"tags":{},"startTime":1779223849367,"traceId":"912c13d76cb327e2"},{"name":"run-turbopack","duration":6894141,"timestamp":415877131807,"id":14,"parentId":1,"tags":{},"startTime":1779223849378,"traceId":"912c13d76cb327e2"},{"name":"turbopack-build-events","duration":71,"timestamp":415877448855,"id":15,"parentId":1,"tags":{},"startTime":1779223849695,"traceId":"912c13d76cb327e2"},{"name":"run-typescript","duration":10403660,"timestamp":415884037886,"id":16,"parentId":1,"tags":{},"startTime":1779223856284,"traceId":"912c13d76cb327e2"},{"name":"generate-required-server-files","duration":3676,"timestamp":415894443039,"id":18,"parentId":1,"tags":{},"startTime":1779223866689,"traceId":"912c13d76cb327e2"},{"name":"check-static-error-page","duration":13900,"timestamp":415894655489,"id":20,"parentId":19,"tags":{},"startTime":1779223866902,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":532856,"timestamp":415894673426,"id":65,"parentId":22,"tags":{},"startTime":1779223866920,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":548665,"timestamp":415894657808,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1779223866904,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":576773,"timestamp":415894673524,"id":66,"parentId":25,"tags":{},"startTime":1779223866920,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":589869,"timestamp":415894660537,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1779223866907,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":589612,"timestamp":415894674048,"id":70,"parentId":29,"tags":{},"startTime":1779223866920,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":602447,"timestamp":415894661301,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1779223866908,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":598260,"timestamp":415894674281,"id":72,"parentId":32,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":610911,"timestamp":415894661883,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1779223866908,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":598693,"timestamp":415894674463,"id":73,"parentId":33,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":611155,"timestamp":415894662058,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1779223866908,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":606690,"timestamp":415894674544,"id":74,"parentId":34,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":619118,"timestamp":415894662181,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1779223866908,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":616116,"timestamp":415894674602,"id":76,"parentId":36,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":628036,"timestamp":415894662740,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1779223866909,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":633250,"timestamp":415894674629,"id":77,"parentId":37,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":645082,"timestamp":415894662871,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1779223866909,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":640832,"timestamp":415894674649,"id":78,"parentId":38,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":652595,"timestamp":415894662964,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1779223866909,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":641180,"timestamp":415894674576,"id":75,"parentId":35,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":653494,"timestamp":415894662297,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1779223866909,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":644569,"timestamp":415894674666,"id":79,"parentId":39,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":656215,"timestamp":415894663065,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1779223866909,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":656761,"timestamp":415894674693,"id":81,"parentId":42,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":667996,"timestamp":415894663534,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1779223866910,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":661149,"timestamp":415894673126,"id":64,"parentId":21,"tags":{},"startTime":1779223866919,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":677628,"timestamp":415894656692,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1779223866903,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":665335,"timestamp":415894674706,"id":82,"parentId":44,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":676116,"timestamp":415894663976,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1779223866910,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":666678,"timestamp":415894674730,"id":84,"parentId":46,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":677195,"timestamp":415894664261,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1779223866911,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":670207,"timestamp":415894673599,"id":67,"parentId":26,"tags":{},"startTime":1779223866920,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":682983,"timestamp":415894660868,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1779223866907,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":671192,"timestamp":415894674745,"id":85,"parentId":47,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":681596,"timestamp":415894664394,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1779223866911,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":674586,"timestamp":415894674683,"id":80,"parentId":40,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":686277,"timestamp":415894663160,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1779223866909,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":675810,"timestamp":415894674773,"id":87,"parentId":49,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":684570,"timestamp":415894666054,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1779223866912,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":679728,"timestamp":415894673675,"id":68,"parentId":27,"tags":{},"startTime":1779223866920,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":692424,"timestamp":415894661028,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1779223866907,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":679595,"timestamp":415894674796,"id":89,"parentId":51,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":688258,"timestamp":415894666181,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1779223866912,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":676520,"timestamp":415894682693,"id":91,"parentId":31,"tags":{},"startTime":1779223866929,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":697637,"timestamp":415894661622,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1779223866908,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":679078,"timestamp":415894681506,"id":90,"parentId":24,"tags":{},"startTime":1779223866928,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":702428,"timestamp":415894658209,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1779223866904,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":687310,"timestamp":415894674782,"id":88,"parentId":50,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":696510,"timestamp":415894666128,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1779223866912,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":690103,"timestamp":415894673779,"id":69,"parentId":28,"tags":{},"startTime":1779223866920,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":702749,"timestamp":415894661179,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1779223866907,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":673551,"timestamp":415894690997,"id":92,"parentId":41,"tags":{},"startTime":1779223866937,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":701344,"timestamp":415894663246,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1779223866910,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":717271,"timestamp":415894674760,"id":86,"parentId":48,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":726211,"timestamp":415894665899,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1779223866912,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":708892,"timestamp":415894692406,"id":93,"parentId":43,"tags":{},"startTime":1779223866939,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":737715,"timestamp":415894663681,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1779223866910,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":736149,"timestamp":415894674214,"id":71,"parentId":30,"tags":{},"startTime":1779223866920,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":748965,"timestamp":415894661497,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1779223866908,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":744920,"timestamp":415894704816,"id":94,"parentId":23,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":791787,"timestamp":415894658025,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1779223866904,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":753111,"timestamp":415894704927,"id":100,"parentId":58,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":790402,"timestamp":415894667705,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1779223866914,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":783552,"timestamp":415894674720,"id":83,"parentId":45,"tags":{},"startTime":1779223866921,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":794168,"timestamp":415894664142,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1779223866910,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":763837,"timestamp":415894705069,"id":101,"parentId":59,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":801104,"timestamp":415894667914,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1779223866914,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":764174,"timestamp":415894705092,"id":102,"parentId":61,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":800715,"timestamp":415894668590,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1779223866915,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":772530,"timestamp":415894705123,"id":104,"parentId":63,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":809304,"timestamp":415894668933,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1779223866915,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":774021,"timestamp":415894704874,"id":96,"parentId":53,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":812383,"timestamp":415894666568,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1779223866913,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":776645,"timestamp":415894704861,"id":95,"parentId":52,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":815082,"timestamp":415894666469,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1779223866913,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":780158,"timestamp":415894705109,"id":103,"parentId":62,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":816560,"timestamp":415894668750,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1779223866915,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":763577,"timestamp":415894721828,"id":105,"parentId":60,"tags":{},"startTime":1779223866968,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":817304,"timestamp":415894668125,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1779223866914,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":783181,"timestamp":415894704913,"id":99,"parentId":56,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":821202,"timestamp":415894666939,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1779223866913,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":743109,"timestamp":415894745834,"id":106,"parentId":57,"tags":{},"startTime":1779223866992,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":821822,"timestamp":415894667157,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1779223866913,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":786443,"timestamp":415894704903,"id":98,"parentId":55,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":824596,"timestamp":415894666801,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1779223866913,"traceId":"912c13d76cb327e2"},{"name":"is-page-static","duration":796851,"timestamp":415894704888,"id":97,"parentId":54,"tags":{},"startTime":1779223866951,"traceId":"912c13d76cb327e2"},{"name":"check-page","duration":835101,"timestamp":415894666669,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1779223866913,"traceId":"912c13d76cb327e2"},{"name":"static-check","duration":847181,"timestamp":415894654638,"id":19,"parentId":1,"tags":{},"startTime":1779223866901,"traceId":"912c13d76cb327e2"}]
2
+ [{"name":"write-routes-manifest","duration":612,"timestamp":415895511987,"id":108,"parentId":1,"tags":{},"startTime":1779223867758,"traceId":"912c13d76cb327e2"},{"name":"load-dotenv","duration":43,"timestamp":415895523240,"id":111,"parentId":110,"tags":{},"startTime":1779223867770,"traceId":"912c13d76cb327e2"},{"name":"run-export-path-map","duration":581,"timestamp":415895525588,"id":112,"parentId":110,"tags":{},"startTime":1779223867772,"traceId":"912c13d76cb327e2"},{"name":"next-export","duration":626455,"timestamp":415895522049,"id":110,"parentId":1,"tags":{},"startTime":1779223867768,"traceId":"912c13d76cb327e2"},{"name":"move-exported-app-not-found-","duration":653,"timestamp":415896152575,"id":113,"parentId":109,"tags":{},"startTime":1779223868399,"traceId":"912c13d76cb327e2"},{"name":"move-exported-app-global-error-","duration":416,"timestamp":415896153321,"id":114,"parentId":109,"tags":{},"startTime":1779223868400,"traceId":"912c13d76cb327e2"},{"name":"static-generation","duration":638946,"timestamp":415895516683,"id":109,"parentId":1,"tags":{},"startTime":1779223867763,"traceId":"912c13d76cb327e2"},{"name":"write-routes-manifest","duration":451,"timestamp":415896155861,"id":115,"parentId":1,"tags":{},"startTime":1779223868402,"traceId":"912c13d76cb327e2"},{"name":"print-tree-view","duration":4692,"timestamp":415896168868,"id":116,"parentId":1,"tags":{},"startTime":1779223868415,"traceId":"912c13d76cb327e2"},{"name":"write-route-bundle-stats","duration":15219,"timestamp":415896173592,"id":117,"parentId":1,"tags":{},"startTime":1779223868420,"traceId":"912c13d76cb327e2"},{"name":"telemetry-flush","duration":24978,"timestamp":415896188842,"id":118,"parentId":1,"tags":{},"startTime":1779223868435,"traceId":"912c13d76cb327e2"},{"name":"next-build","duration":19321215,"timestamp":415876892636,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779223849139,"traceId":"912c13d76cb327e2"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":6590231,"timestamp":415249768093,"id":14,"parentId":1,"tags":{},"startTime":1779223222014,"traceId":"a812cc422b85a022"},{"name":"turbopack-build-events","duration":81,"timestamp":415250095746,"id":15,"parentId":1,"tags":{},"startTime":1779223222342,"traceId":"a812cc422b85a022"},{"name":"run-typescript","duration":10224688,"timestamp":415256381728,"id":16,"parentId":1,"tags":{},"startTime":1779223228628,"traceId":"a812cc422b85a022"},{"name":"static-check","duration":820501,"timestamp":415266813287,"id":19,"parentId":1,"tags":{},"startTime":1779223239060,"traceId":"a812cc422b85a022"},{"name":"static-generation","duration":682692,"timestamp":415267647955,"id":109,"parentId":1,"tags":{},"startTime":1779223239894,"traceId":"a812cc422b85a022"},{"name":"telemetry-flush","duration":33778,"timestamp":415268366454,"id":118,"parentId":1,"tags":{},"startTime":1779223240613,"traceId":"a812cc422b85a022"},{"name":"next-build","duration":18883552,"timestamp":415249516713,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779223221763,"traceId":"a812cc422b85a022"}]
1
+ [{"name":"run-turbopack","duration":6894141,"timestamp":415877131807,"id":14,"parentId":1,"tags":{},"startTime":1779223849378,"traceId":"912c13d76cb327e2"},{"name":"turbopack-build-events","duration":71,"timestamp":415877448855,"id":15,"parentId":1,"tags":{},"startTime":1779223849695,"traceId":"912c13d76cb327e2"},{"name":"run-typescript","duration":10403660,"timestamp":415884037886,"id":16,"parentId":1,"tags":{},"startTime":1779223856284,"traceId":"912c13d76cb327e2"},{"name":"static-check","duration":847181,"timestamp":415894654638,"id":19,"parentId":1,"tags":{},"startTime":1779223866901,"traceId":"912c13d76cb327e2"},{"name":"static-generation","duration":638946,"timestamp":415895516683,"id":109,"parentId":1,"tags":{},"startTime":1779223867763,"traceId":"912c13d76cb327e2"},{"name":"telemetry-flush","duration":24978,"timestamp":415896188842,"id":118,"parentId":1,"tags":{},"startTime":1779223868435,"traceId":"912c13d76cb327e2"},{"name":"next-build","duration":19321215,"timestamp":415876892636,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1779223849139,"traceId":"912c13d76cb327e2"}]
@@ -5192,6 +5192,13 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5192
5192
  The R733 test handles this by relaxing the canonical-format
5193
5193
  regex to `[^·]+( · [^·]+)+` (≥2 parts). */
5194
5194
  { surface: "hub-highlight disc", selector: "[data-topo-hub-highlight]", accessible_name: "hub · network center · idle indicator" },
5195
+ /* R735 — canvas scan beam ambient animation gains a11y <title>.
5196
+ First non-static (animated) titled surface; 3-part canonical
5197
+ form with cadence as state context. */
5198
+ { surface: "canvas scan beam", selector: "[data-topo-canvas-scan-beam]", accessible_name: "canvas scan beam · ambient sweep · 30s cycle" },
5199
+ /* R736 — vertical scan beam companion to R735. Coprime
5200
+ cadence (23s) with R735 (30s) — ambient crosshair drift. */
5201
+ { surface: "canvas scan beam vertical", selector: "[data-topo-canvas-scan-beam-vertical]", accessible_name: "canvas scan beam vertical · ambient sweep · 23s cycle" },
5195
5202
  ])}
5196
5203
  data-topo-pinned-aspect={(() => {
5197
5204
  const aspects: string[] = [];
@@ -5387,6 +5394,80 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
5387
5394
  {/* panel backdrop stays fixed — panning never reveals empty canvas */}
5388
5395
  <rect width="1000" height="680" fill="url(#topo-panel)" />
5389
5396
 
5397
+ {/* Round 735 / Loop — SVG scan beam: ambient living-system
5398
+ signal sweeping the canvas every 30 s. Pivot round: first
5399
+ new VISIBLE animation outside the breath / a11y / meta-doc
5400
+ threads since R720. Pure paint:
5401
+ - 1 px tall horizontal cyan stripe
5402
+ - y animates -2 → 680 over 30 s (full canvas sweep)
5403
+ - opacity 0 → 0.08 → 0.08 → 0 at keyTimes 0/0.05/0.95/1
5404
+ - pointer-events: none, no business logic touch
5405
+ Renders directly after the panel backdrop and BEFORE all
5406
+ nodes/panels — sits in the background layer; nodes paint
5407
+ over it. The overlap-test selectors (g[data-node],
5408
+ g[data-group], specific panel translate prefixes) don't
5409
+ match this <rect>, so the zero-overlap invariant stays
5410
+ green by selector exclusion.
5411
+ Gated by !reducedMotion at JSX level — when the user
5412
+ prefers reduced motion the <animate> children don't
5413
+ mount; opacity stays at the static "0" baseline, beam
5414
+ remains invisible. data-topo-canvas-scan-beam attr
5415
+ exposes the mount state for tests. */}
5416
+ <rect
5417
+ x="0" y="-2" width="1000" height="1"
5418
+ fill={pal.legendAccent}
5419
+ opacity="0"
5420
+ data-topo-canvas-scan-beam
5421
+ data-topo-canvas-scan-beam-active={!reducedMotion ? 'true' : 'false'}
5422
+ style={{ pointerEvents: 'none' }}
5423
+ >
5424
+ {!reducedMotion && (
5425
+ <animate attributeName="y" values="-2;680;-2" dur="30s" repeatCount="indefinite" />
5426
+ )}
5427
+ {!reducedMotion && (
5428
+ <animate attributeName="opacity" values="0;0.08;0.08;0" keyTimes="0;0.05;0.95;1" dur="30s" repeatCount="indefinite" />
5429
+ )}
5430
+ <title>canvas scan beam · ambient sweep · 30s cycle</title>
5431
+ </rect>
5432
+
5433
+ {/* Round 736 / Loop — vertical scan beam companion to R735.
5434
+ Sweeps left→right at 23 s. The pair forms the "scan beam"
5435
+ ambient family — both beams in background layer, both
5436
+ subtle (max opacity 0.08), but at COPRIME cadences:
5437
+ R735 horizontal beam 30 s (top → bottom)
5438
+ R736 vertical beam 23 s (left → right) ← this round
5439
+ gcd(23, 30) = 1 → the beams never phase-lock, so they
5440
+ cross at different canvas points each cycle. Over time the
5441
+ visual rhythm reads as "ambient crosshair drift", a
5442
+ living-system signal that's never quite the same twice.
5443
+
5444
+ 23 is prime → coprime with every other rolodex cadence
5445
+ too (the breath family's prime ladder R703/R707/R708/
5446
+ R718/R719: 9/17/19/21/23/25 — but R736 lives outside
5447
+ the breath family in the ambient layer, so no actual
5448
+ phase-lock concern with rolodex members).
5449
+
5450
+ Same z-order (background layer, before nodes), same
5451
+ reducedMotion JSX gate, same overlap-test safety by
5452
+ selector exclusion. Same canonical 3-part a11y title:
5453
+ "<name> · <role> · <state>". */}
5454
+ <rect
5455
+ x="-2" y="0" width="1" height="680"
5456
+ fill={pal.legendAccent}
5457
+ opacity="0"
5458
+ data-topo-canvas-scan-beam-vertical
5459
+ data-topo-canvas-scan-beam-vertical-active={!reducedMotion ? 'true' : 'false'}
5460
+ style={{ pointerEvents: 'none' }}
5461
+ >
5462
+ {!reducedMotion && (
5463
+ <animate attributeName="x" values="-2;1000;-2" dur="23s" repeatCount="indefinite" />
5464
+ )}
5465
+ {!reducedMotion && (
5466
+ <animate attributeName="opacity" values="0;0.08;0.08;0" keyTimes="0;0.05;0.95;1" dur="23s" repeatCount="indefinite" />
5467
+ )}
5468
+ <title>canvas scan beam vertical · ambient sweep · 23s cycle</title>
5469
+ </rect>
5470
+
5390
5471
  {/* Round 103 (issue #81): everything inside this <g> zooms + pans
5391
5472
  together. transform order = translate then scale.
5392
5473
  Round 168 / Loop: smoothView arms a one-shot transition on
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network-dashboard",
3
- "version": "0.5.3-preview.248",
3
+ "version": "0.5.3-preview.250",
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-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 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_6_entries: Array.isArray(catalog) && catalog.length === 6,
121
+ has_8_entries: Array.isArray(catalog) && catalog.length === 8,
122
122
  shape_valid: validShape,
123
123
  all_accessible_names_canonical: allCanonical,
124
124
  surfaces_match_expected_set: surfacesMatch,
@@ -0,0 +1,109 @@
1
+ /* Round 735 — SVG scan beam: ambient living-system sweep across the
2
+ * canvas every 30 s. Pivot round: first genuinely new VISIBLE
3
+ * animation outside the breath / a11y / meta-doc threads since R720.
4
+ *
5
+ * Spec:
6
+ * - 1 px tall horizontal cyan stripe (pal.legendAccent)
7
+ * - y animates -2 → 680 → -2 over 30 s repeatCount=indefinite
8
+ * - opacity animates 0 → 0.08 → 0.08 → 0 at keyTimes 0/0.05/0.95/1
9
+ * - pointer-events: none, no business logic
10
+ * - rendered AFTER panel backdrop, BEFORE all other canvas content
11
+ * (background layer; nodes paint over it)
12
+ * - gated by !reducedMotion at JSX level
13
+ * - SVG <title> child for a11y ("canvas scan beam · ambient sweep · 30s cycle")
14
+ *
15
+ * Assertions:
16
+ * - <rect data-topo-canvas-scan-beam> exists
17
+ * - Two <animate> children: attributeName="y" and attributeName="opacity"
18
+ * - y animate has values "-2;680;-2" and dur "30s"
19
+ * - opacity animate has values "0;0.08;0.08;0" and dur "30s"
20
+ * - <title> child has the expected accessible name
21
+ * - data-topo-canvas-scan-beam-active="true" (reducedMotion off in test)
22
+ * - Beam is rendered BEFORE nodes (background-layer z-order)
23
+ * - R732 a11y-titles catalog has the scan-beam entry (7 total)
24
+ * - Overlap-test selectors don't match the rect (no data-node /
25
+ * data-group, no matching translate prefix) — verified indirectly
26
+ * by overlap test still passing
27
+ */
28
+ import { chromium } from 'playwright';
29
+ import { readFileSync } from 'node:fs';
30
+
31
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
32
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
33
+
34
+ const browser = await chromium.launch({ headless: true });
35
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
36
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
37
+ await ctx.addInitScript(() => {
38
+ try {
39
+ localStorage.setItem('anet-theme', 'cyber');
40
+ localStorage.setItem('anet-topo-layout', 'ring');
41
+ sessionStorage.setItem('anet_v3_auth', '1');
42
+ } catch {}
43
+ });
44
+ await ctx.route('**/api/hub/status*', async (route) => {
45
+ const r = await route.fetch();
46
+ const b = await r.json();
47
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
48
+ const mk = (alias) => ({
49
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
50
+ network_id: nid, project_dir: null,
51
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
52
+ });
53
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
54
+ });
55
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
56
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
57
+ const page = await ctx.newPage();
58
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
59
+ await page.waitForSelector('[data-topo-canvas-scan-beam]', { timeout: 15000, state: 'attached' });
60
+ await page.waitForTimeout(300);
61
+
62
+ const state = await page.evaluate(() => {
63
+ const beam = document.querySelector('[data-topo-canvas-scan-beam]');
64
+ if (!beam) return null;
65
+ const yAnim = beam.querySelector('animate[attributeName="y"]');
66
+ const opAnim = beam.querySelector('animate[attributeName="opacity"]');
67
+ const titleEl = beam.querySelector(':scope > title');
68
+ const svg = document.querySelector('[data-topo-canvas-aria]');
69
+ const firstNode = svg?.querySelector('g[data-node]');
70
+ const beamBeforeNodes = beam && firstNode
71
+ ? (beam.compareDocumentPosition(firstNode) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0
72
+ : null;
73
+ const catalogAttr = svg?.getAttribute('data-topo-a11y-titles') ?? null;
74
+ return {
75
+ beam_present: !!beam,
76
+ beam_active_attr: beam?.getAttribute('data-topo-canvas-scan-beam-active') ?? null,
77
+ beam_width: beam?.getAttribute('width') ?? null,
78
+ beam_height: beam?.getAttribute('height') ?? null,
79
+ y_anim_present: !!yAnim,
80
+ y_anim_values: yAnim?.getAttribute('values') ?? null,
81
+ y_anim_dur: yAnim?.getAttribute('dur') ?? null,
82
+ y_anim_repeat: yAnim?.getAttribute('repeatCount') ?? null,
83
+ op_anim_present: !!opAnim,
84
+ op_anim_values: opAnim?.getAttribute('values') ?? null,
85
+ op_anim_dur: opAnim?.getAttribute('dur') ?? null,
86
+ op_anim_keytimes: opAnim?.getAttribute('keyTimes') ?? null,
87
+ title_text: titleEl?.textContent ?? null,
88
+ beam_before_nodes: beamBeforeNodes,
89
+ catalog_has_entry: typeof catalogAttr === 'string' && catalogAttr.includes('canvas scan beam'),
90
+ };
91
+ });
92
+
93
+ await browser.close();
94
+
95
+ const results = {
96
+ beam_rect_present: state?.beam_present === true,
97
+ beam_active_true: state?.beam_active_attr === 'true',
98
+ beam_full_width_1px: state?.beam_width === '1000' && state?.beam_height === '1',
99
+ y_anim_full_sweep: state?.y_anim_present === true && state?.y_anim_values === '-2;680;-2' && state?.y_anim_dur === '30s' && state?.y_anim_repeat === 'indefinite',
100
+ opacity_anim_ramped: state?.op_anim_present === true && state?.op_anim_values === '0;0.08;0.08;0' && state?.op_anim_dur === '30s' && state?.op_anim_keytimes === '0;0.05;0.95;1',
101
+ a11y_title_present: state?.title_text === 'canvas scan beam · ambient sweep · 30s cycle',
102
+ beam_in_background_layer: state?.beam_before_nodes === true,
103
+ r732_catalog_includes_beam: state?.catalog_has_entry === true,
104
+ };
105
+ const ok = Object.values(results).every(Boolean);
106
+ console.log(`${ok ? '✅' : '❌'} R735 SVG canvas scan beam (ambient 30s sweep, first non-introspection visible animation since R720):`,
107
+ JSON.stringify(results, null, 2),
108
+ `\n state: ${JSON.stringify(state)}`);
109
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,123 @@
1
+ /* Round 736 — vertical scan beam companion to R735's horizontal beam.
2
+ * Forms the "scan beam" ambient family — coprime cadences mean the
3
+ * beams never phase-lock; over time the visual rhythm reads as
4
+ * "ambient crosshair drift".
5
+ *
6
+ * R735 horizontal beam 30 s (top → bottom)
7
+ * R736 vertical beam 23 s (left → right) ← this round
8
+ * gcd(23, 30) = 1
9
+ *
10
+ * Assertions:
11
+ * - <rect data-topo-canvas-scan-beam-vertical> exists with 1×680 box
12
+ * - x animates -2 → 1000 → -2 over 23s repeatCount=indefinite
13
+ * - opacity animates 0 → 0.08 → 0.08 → 0 at keyTimes 0/0.05/0.95/1, dur 23s
14
+ * - SVG <title> child = "canvas scan beam vertical · ambient sweep · 23s cycle"
15
+ * - data-topo-canvas-scan-beam-vertical-active="true" (reducedMotion off)
16
+ * - vertical beam in background layer (rendered before nodes)
17
+ * - vertical beam rendered AFTER horizontal beam (pair grouping)
18
+ * - R735 horizontal beam still intact (regression — y, dur, title preserved)
19
+ * - coprime cadences: gcd(23, 30) === 1 — verified by checking the
20
+ * two beams' durs are 23s/30s and Math.gcd-equivalent reduces to 1
21
+ * - R732 a11y-titles catalog has 8 entries incl. vertical beam
22
+ */
23
+ import { chromium } from 'playwright';
24
+ import { readFileSync } from 'node:fs';
25
+
26
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
27
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
28
+
29
+ const browser = await chromium.launch({ headless: true });
30
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
31
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
32
+ await ctx.addInitScript(() => {
33
+ try {
34
+ localStorage.setItem('anet-theme', 'cyber');
35
+ localStorage.setItem('anet-topo-layout', 'ring');
36
+ sessionStorage.setItem('anet_v3_auth', '1');
37
+ } catch {}
38
+ });
39
+ await ctx.route('**/api/hub/status*', async (route) => {
40
+ const r = await route.fetch();
41
+ const b = await r.json();
42
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
43
+ const mk = (alias) => ({
44
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
45
+ network_id: nid, project_dir: null,
46
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
47
+ });
48
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
49
+ });
50
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
51
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
52
+ const page = await ctx.newPage();
53
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
54
+ await page.waitForSelector('[data-topo-canvas-scan-beam-vertical]', { timeout: 15000, state: 'attached' });
55
+ await page.waitForTimeout(300);
56
+
57
+ const state = await page.evaluate(() => {
58
+ const vbeam = document.querySelector('[data-topo-canvas-scan-beam-vertical]');
59
+ const hbeam = document.querySelector('[data-topo-canvas-scan-beam]');
60
+ if (!vbeam || !hbeam) return null;
61
+ const xAnim = vbeam.querySelector('animate[attributeName="x"]');
62
+ const opAnim = vbeam.querySelector('animate[attributeName="opacity"]');
63
+ const vtitle = vbeam.querySelector(':scope > title');
64
+ const yAnim = hbeam.querySelector('animate[attributeName="y"]');
65
+ const htitle = hbeam.querySelector(':scope > title');
66
+ const svg = document.querySelector('[data-topo-canvas-aria]');
67
+ const firstNode = svg?.querySelector('g[data-node]');
68
+ const vbeamBeforeNodes = vbeam && firstNode
69
+ ? (vbeam.compareDocumentPosition(firstNode) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0
70
+ : null;
71
+ const vbeamAfterHbeam = hbeam && vbeam
72
+ ? (hbeam.compareDocumentPosition(vbeam) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0
73
+ : null;
74
+ const catalogAttr = svg?.getAttribute('data-topo-a11y-titles') ?? null;
75
+ return {
76
+ vbeam_present: !!vbeam,
77
+ vbeam_active_attr: vbeam?.getAttribute('data-topo-canvas-scan-beam-vertical-active') ?? null,
78
+ vbeam_width: vbeam?.getAttribute('width') ?? null,
79
+ vbeam_height: vbeam?.getAttribute('height') ?? null,
80
+ x_anim_present: !!xAnim,
81
+ x_anim_values: xAnim?.getAttribute('values') ?? null,
82
+ x_anim_dur: xAnim?.getAttribute('dur') ?? null,
83
+ x_anim_repeat: xAnim?.getAttribute('repeatCount') ?? null,
84
+ op_anim_present: !!opAnim,
85
+ op_anim_values: opAnim?.getAttribute('values') ?? null,
86
+ op_anim_dur: opAnim?.getAttribute('dur') ?? null,
87
+ op_anim_keytimes: opAnim?.getAttribute('keyTimes') ?? null,
88
+ vtitle_text: vtitle?.textContent ?? null,
89
+ hbeam_present: !!hbeam,
90
+ hbeam_y_dur: yAnim?.getAttribute('dur') ?? null,
91
+ hbeam_y_values: yAnim?.getAttribute('values') ?? null,
92
+ htitle_text: htitle?.textContent ?? null,
93
+ vbeam_before_nodes: vbeamBeforeNodes,
94
+ vbeam_after_hbeam: vbeamAfterHbeam,
95
+ catalog_includes_vbeam: typeof catalogAttr === 'string' && catalogAttr.includes('canvas scan beam vertical'),
96
+ };
97
+ });
98
+
99
+ await browser.close();
100
+
101
+ const gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));
102
+ const coprime_23_30 = gcd(23, 30) === 1;
103
+
104
+ const results = {
105
+ vbeam_rect_present: state?.vbeam_present === true,
106
+ vbeam_active_true: state?.vbeam_active_attr === 'true',
107
+ vbeam_1px_full_height: state?.vbeam_width === '1' && state?.vbeam_height === '680',
108
+ x_anim_full_sweep: state?.x_anim_present === true && state?.x_anim_values === '-2;1000;-2' && state?.x_anim_dur === '23s' && state?.x_anim_repeat === 'indefinite',
109
+ vbeam_opacity_anim_ramped: state?.op_anim_present === true && state?.op_anim_values === '0;0.08;0.08;0' && state?.op_anim_dur === '23s' && state?.op_anim_keytimes === '0;0.05;0.95;1',
110
+ vbeam_a11y_title_present: state?.vtitle_text === 'canvas scan beam vertical · ambient sweep · 23s cycle',
111
+ vbeam_in_background_layer: state?.vbeam_before_nodes === true,
112
+ vbeam_after_horizontal_beam: state?.vbeam_after_hbeam === true,
113
+ hbeam_y_30s_preserved: state?.hbeam_y_dur === '30s' && state?.hbeam_y_values === '-2;680;-2',
114
+ hbeam_title_preserved: state?.htitle_text === 'canvas scan beam · ambient sweep · 30s cycle',
115
+ coprime_cadences_23_30: coprime_23_30,
116
+ r732_catalog_includes_vbeam: state?.catalog_includes_vbeam === true,
117
+ };
118
+ const ok = Object.values(results).every(Boolean);
119
+ console.log(`${ok ? '✅' : '❌'} R736 vertical scan beam (companion to R735, coprime cadences form ambient crosshair pair):`,
120
+ JSON.stringify(results, null, 2),
121
+ `\n state: ${JSON.stringify(state)}`,
122
+ `\n gcd(23, 30) = ${gcd(23, 30)}`);
123
+ process.exit(ok ? 0 : 1);