@sleep2agi/agent-network-dashboard 0.4.6-preview.362 → 0.4.6-preview.363
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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +4 -4
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/admin.html +1 -1
- package/.next/server/app/admin.rsc +1 -1
- package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs.html +1 -1
- package/.next/server/app/logs.rsc +1 -1
- package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages.html +1 -1
- package/.next/server/app/messages.rsc +1 -1
- package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node.html +1 -1
- package/.next/server/app/node.rsc +1 -1
- package/.next/server/app/node.segments/_full.segment.rsc +1 -1
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +1 -1
- package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes.html +1 -1
- package/.next/server/app/nodes.rsc +1 -1
- package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +1 -1
- package/.next/server/app/server-logs.rsc +1 -1
- package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/settings/networks.html +1 -1
- package/.next/server/app/settings/networks.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +1 -1
- package/.next/server/app/settings/tokens.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks.html +1 -1
- package/.next/server/app/tasks.rsc +1 -1
- package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
- package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/{0b5odyhyr1fnp.js → 06bfn73sfnyut.js} +1 -1
- package/.next/static/chunks/{0mmvfihvlb_w4.js → 0899uvk6dbkf~.js} +1 -1
- package/.next/static/chunks/{0utwz8~_w7ae2.js → 0l5xx57wh29-o.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/api/hub/servers/route.ts +77 -1
- package/app/components/TopoGraph.tsx +18 -5
- package/package.json +1 -1
- package/scripts/topo-filter-pill-count-tabular-test.mjs +135 -0
- /package/.next/static/{5LdAxDjnLcwVdWMm8Id_r → s5Iteo_lZIHlLuHW2r0KA}/_buildManifest.js +0 -0
- /package/.next/static/{5LdAxDjnLcwVdWMm8Id_r → s5Iteo_lZIHlLuHW2r0KA}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{5LdAxDjnLcwVdWMm8Id_r → s5Iteo_lZIHlLuHW2r0KA}/_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.4.6-preview.361"],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.4.6-preview.363"],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":262,"timestamp":121779888356,"id":4,"parentId":1,"tags":{},"startTime":1778929752135,"traceId":"89a9eb83accb0dc0"},{"name":"load-custom-routes","duration":498,"timestamp":121779888760,"id":5,"parentId":1,"tags":{},"startTime":1778929752135,"traceId":"89a9eb83accb0dc0"},{"name":"create-dist-dir","duration":847,"timestamp":121779889305,"id":6,"parentId":1,"tags":{},"startTime":1778929752136,"traceId":"89a9eb83accb0dc0"},{"name":"clean","duration":35688,"timestamp":121779891085,"id":7,"parentId":1,"tags":{},"startTime":1778929752137,"traceId":"89a9eb83accb0dc0"},{"name":"discover-routes","duration":30157,"timestamp":121780020572,"id":8,"parentId":1,"tags":{},"startTime":1778929752267,"traceId":"89a9eb83accb0dc0"},{"name":"create-root-mapping","duration":165,"timestamp":121780050813,"id":9,"parentId":1,"tags":{},"startTime":1778929752297,"traceId":"89a9eb83accb0dc0"},{"name":"generate-route-types","duration":24322,"timestamp":121780054358,"id":10,"parentId":1,"tags":{},"startTime":1778929752301,"traceId":"89a9eb83accb0dc0"},{"name":"public-dir-conflict-check","duration":128,"timestamp":121780078788,"id":11,"parentId":1,"tags":{},"startTime":1778929752325,"traceId":"89a9eb83accb0dc0"},{"name":"generate-routes-manifest","duration":4990,"timestamp":121780079081,"id":12,"parentId":1,"tags":{},"startTime":1778929752325,"traceId":"89a9eb83accb0dc0"},{"name":"run-turbopack","duration":7524781,"timestamp":121780090131,"id":14,"parentId":1,"tags":{},"startTime":1778929752336,"traceId":"89a9eb83accb0dc0"},{"name":"turbopack-build-events","duration":113,"timestamp":121780411608,"id":15,"parentId":1,"tags":{},"startTime":1778929752658,"traceId":"89a9eb83accb0dc0"},{"name":"run-typescript","duration":13525847,"timestamp":121787627421,"id":16,"parentId":1,"tags":{},"startTime":1778929759874,"traceId":"89a9eb83accb0dc0"},{"name":"generate-required-server-files","duration":3119,"timestamp":121801154671,"id":18,"parentId":1,"tags":{},"startTime":1778929773401,"traceId":"89a9eb83accb0dc0"},{"name":"check-static-error-page","duration":21789,"timestamp":121801395251,"id":20,"parentId":19,"tags":{},"startTime":1778929773642,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":717340,"timestamp":121801423111,"id":65,"parentId":22,"tags":{},"startTime":1778929773669,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":740017,"timestamp":121801400603,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778929773647,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":749745,"timestamp":121801423273,"id":66,"parentId":25,"tags":{},"startTime":1778929773670,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":769289,"timestamp":121801403848,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778929773650,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":754658,"timestamp":121801424248,"id":72,"parentId":32,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":773108,"timestamp":121801405879,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778929773652,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":818913,"timestamp":121801424458,"id":73,"parentId":33,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":837393,"timestamp":121801406068,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778929773652,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":826329,"timestamp":121801423783,"id":69,"parentId":28,"tags":{},"startTime":1778929773670,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":845093,"timestamp":121801405117,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778929773651,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":827894,"timestamp":121801424546,"id":74,"parentId":34,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":847332,"timestamp":121801406245,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778929773653,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":831053,"timestamp":121801424575,"id":75,"parentId":35,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":849287,"timestamp":121801406408,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778929773653,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":852005,"timestamp":121801424601,"id":76,"parentId":36,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":869715,"timestamp":121801406966,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778929773653,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":859720,"timestamp":121801424653,"id":78,"parentId":38,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":876809,"timestamp":121801407655,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778929773654,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":863379,"timestamp":121801422617,"id":64,"parentId":21,"tags":{},"startTime":1778929773669,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":887267,"timestamp":121801398807,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778929773645,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":878715,"timestamp":121801424633,"id":77,"parentId":37,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":895946,"timestamp":121801407479,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778929773654,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":894760,"timestamp":121801424665,"id":79,"parentId":39,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":911743,"timestamp":121801407769,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778929773654,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":898173,"timestamp":121801423401,"id":67,"parentId":26,"tags":{},"startTime":1778929773670,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":916940,"timestamp":121801404700,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778929773651,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":909039,"timestamp":121801424710,"id":82,"parentId":43,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":925227,"timestamp":121801408599,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778929773655,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":911501,"timestamp":121801423995,"id":70,"parentId":29,"tags":{},"startTime":1778929773670,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":930296,"timestamp":121801405257,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778929773652,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":919729,"timestamp":121801424744,"id":84,"parentId":45,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":935708,"timestamp":121801408840,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778929773655,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":924219,"timestamp":121801424697,"id":81,"parentId":42,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":940614,"timestamp":121801408417,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778929773655,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":930428,"timestamp":121801424773,"id":86,"parentId":47,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":944248,"timestamp":121801411032,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778929773657,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":932439,"timestamp":121801424728,"id":83,"parentId":44,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":948497,"timestamp":121801408723,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778929773655,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":935985,"timestamp":121801424789,"id":87,"parentId":48,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":949509,"timestamp":121801411318,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778929773658,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":941688,"timestamp":121801424804,"id":88,"parentId":49,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":955059,"timestamp":121801411497,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778929773658,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":948247,"timestamp":121801424185,"id":71,"parentId":30,"tags":{},"startTime":1778929773670,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":967048,"timestamp":121801405438,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778929773652,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":932872,"timestamp":121801439954,"id":91,"parentId":24,"tags":{},"startTime":1778929773686,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":971685,"timestamp":121801401223,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778929773647,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":957858,"timestamp":121801424815,"id":89,"parentId":50,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":971024,"timestamp":121801411703,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778929773658,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":958801,"timestamp":121801424761,"id":85,"parentId":46,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":972800,"timestamp":121801410807,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778929773657,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":943852,"timestamp":121801450236,"id":92,"parentId":31,"tags":{},"startTime":1778929773697,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":988575,"timestamp":121801405572,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778929773652,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":978407,"timestamp":121801424681,"id":80,"parentId":40,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":995246,"timestamp":121801407907,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778929773654,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":958483,"timestamp":121801451223,"id":93,"parentId":41,"tags":{},"startTime":1778929773698,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1001694,"timestamp":121801408075,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778929773654,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":953993,"timestamp":121801458438,"id":97,"parentId":54,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":999719,"timestamp":121801412775,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778929773659,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":989209,"timestamp":121801424831,"id":90,"parentId":51,"tags":{},"startTime":1778929773671,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1002124,"timestamp":121801411971,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778929773658,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":971075,"timestamp":121801458458,"id":99,"parentId":56,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1015787,"timestamp":121801413822,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778929773660,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1008669,"timestamp":121801423517,"id":68,"parentId":27,"tags":{},"startTime":1778929773670,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1027313,"timestamp":121801404931,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778929773651,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":984505,"timestamp":121801458481,"id":101,"parentId":59,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1027673,"timestamp":121801415404,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778929773662,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1025535,"timestamp":121801458447,"id":98,"parentId":55,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1070489,"timestamp":121801413592,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778929773660,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1028403,"timestamp":121801458508,"id":103,"parentId":62,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1070327,"timestamp":121801416661,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778929773663,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1033739,"timestamp":121801458519,"id":104,"parentId":63,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1075531,"timestamp":121801416795,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778929773663,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1030718,"timestamp":121801468359,"id":105,"parentId":60,"tags":{},"startTime":1778929773715,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1083110,"timestamp":121801416071,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778929773662,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1022729,"timestamp":121801480824,"id":106,"parentId":57,"tags":{},"startTime":1778929773727,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1089404,"timestamp":121801414193,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778929773660,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1053294,"timestamp":121801458413,"id":95,"parentId":52,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1099315,"timestamp":121801412460,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778929773659,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1058069,"timestamp":121801458380,"id":94,"parentId":23,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1115587,"timestamp":121801400926,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778929773647,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1067246,"timestamp":121801458470,"id":100,"parentId":58,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1110986,"timestamp":121801414790,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778929773661,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1074143,"timestamp":121801458427,"id":96,"parentId":53,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1119993,"timestamp":121801412631,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778929773659,"traceId":"89a9eb83accb0dc0"},{"name":"is-page-static","duration":1082442,"timestamp":121801458497,"id":102,"parentId":61,"tags":{},"startTime":1778929773705,"traceId":"89a9eb83accb0dc0"},{"name":"check-page","duration":1124503,"timestamp":121801416522,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778929773663,"traceId":"89a9eb83accb0dc0"},{"name":"static-check","duration":1147017,"timestamp":121801394053,"id":19,"parentId":1,"tags":{},"startTime":1778929773640,"traceId":"89a9eb83accb0dc0"}]
|
|
2
|
-
[{"name":"write-routes-manifest","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":317,"timestamp":122311048653,"id":4,"parentId":1,"tags":{},"startTime":1778930283295,"traceId":"0833df250a0c9aa5"},{"name":"load-custom-routes","duration":480,"timestamp":122311049162,"id":5,"parentId":1,"tags":{},"startTime":1778930283295,"traceId":"0833df250a0c9aa5"},{"name":"create-dist-dir","duration":776,"timestamp":122311049686,"id":6,"parentId":1,"tags":{},"startTime":1778930283296,"traceId":"0833df250a0c9aa5"},{"name":"clean","duration":40272,"timestamp":122311051448,"id":7,"parentId":1,"tags":{},"startTime":1778930283298,"traceId":"0833df250a0c9aa5"},{"name":"discover-routes","duration":27169,"timestamp":122311186998,"id":8,"parentId":1,"tags":{},"startTime":1778930283433,"traceId":"0833df250a0c9aa5"},{"name":"create-root-mapping","duration":117,"timestamp":122311214231,"id":9,"parentId":1,"tags":{},"startTime":1778930283461,"traceId":"0833df250a0c9aa5"},{"name":"generate-route-types","duration":19675,"timestamp":122311217236,"id":10,"parentId":1,"tags":{},"startTime":1778930283464,"traceId":"0833df250a0c9aa5"},{"name":"public-dir-conflict-check","duration":112,"timestamp":122311237032,"id":11,"parentId":1,"tags":{},"startTime":1778930283483,"traceId":"0833df250a0c9aa5"},{"name":"generate-routes-manifest","duration":5627,"timestamp":122311237273,"id":12,"parentId":1,"tags":{},"startTime":1778930283484,"traceId":"0833df250a0c9aa5"},{"name":"run-turbopack","duration":7563636,"timestamp":122311250646,"id":14,"parentId":1,"tags":{},"startTime":1778930283497,"traceId":"0833df250a0c9aa5"},{"name":"turbopack-build-events","duration":121,"timestamp":122311593363,"id":15,"parentId":1,"tags":{},"startTime":1778930283840,"traceId":"0833df250a0c9aa5"},{"name":"run-typescript","duration":10884268,"timestamp":122318858626,"id":16,"parentId":1,"tags":{},"startTime":1778930291105,"traceId":"0833df250a0c9aa5"},{"name":"generate-required-server-files","duration":3720,"timestamp":122329744394,"id":18,"parentId":1,"tags":{},"startTime":1778930301991,"traceId":"0833df250a0c9aa5"},{"name":"check-static-error-page","duration":16192,"timestamp":122329947725,"id":20,"parentId":19,"tags":{},"startTime":1778930302194,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":685870,"timestamp":122329969537,"id":69,"parentId":28,"tags":{},"startTime":1778930302216,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":698674,"timestamp":122329956906,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778930302203,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":689970,"timestamp":122329968911,"id":65,"parentId":22,"tags":{},"startTime":1778930302215,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":707828,"timestamp":122329951141,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778930302197,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":691764,"timestamp":122329969838,"id":71,"parentId":30,"tags":{},"startTime":1778930302216,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":704384,"timestamp":122329957277,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778930302204,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":703160,"timestamp":122329970143,"id":73,"parentId":33,"tags":{},"startTime":1778930302216,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":715591,"timestamp":122329957767,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778930302204,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":708641,"timestamp":122329970224,"id":74,"parentId":34,"tags":{},"startTime":1778930302216,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":721050,"timestamp":122329957868,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778930302204,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":720867,"timestamp":122329970252,"id":75,"parentId":35,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":733236,"timestamp":122329957948,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778930302204,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":739650,"timestamp":122329969211,"id":67,"parentId":26,"tags":{},"startTime":1778930302215,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":754555,"timestamp":122329954379,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778930302201,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":752214,"timestamp":122329970269,"id":76,"parentId":36,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":764225,"timestamp":122329958335,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":776564,"timestamp":122329968571,"id":64,"parentId":21,"tags":{},"startTime":1778930302215,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":795786,"timestamp":122329949431,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778930302196,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":781933,"timestamp":122329970312,"id":78,"parentId":38,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":793779,"timestamp":122329958549,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":783687,"timestamp":122329969702,"id":70,"parentId":29,"tags":{},"startTime":1778930302216,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":796340,"timestamp":122329957114,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778930302203,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":789996,"timestamp":122329970340,"id":80,"parentId":40,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":801736,"timestamp":122329958673,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":792700,"timestamp":122329970362,"id":82,"parentId":43,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":803919,"timestamp":122329959205,"id":43,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":794641,"timestamp":122329970292,"id":77,"parentId":37,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":806531,"timestamp":122329958453,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":798903,"timestamp":122329970374,"id":83,"parentId":44,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":810132,"timestamp":122329959341,"id":44,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778930302206,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":807193,"timestamp":122329970395,"id":85,"parentId":46,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":818104,"timestamp":122329959533,"id":46,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778930302206,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":815482,"timestamp":122329970409,"id":86,"parentId":47,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":824705,"timestamp":122329961251,"id":47,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":824784,"timestamp":122329970422,"id":87,"parentId":48,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":833892,"timestamp":122329961374,"id":48,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":829417,"timestamp":122329970431,"id":88,"parentId":49,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":838441,"timestamp":122329961461,"id":49,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":834900,"timestamp":122329970443,"id":89,"parentId":50,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":843880,"timestamp":122329961516,"id":50,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":840744,"timestamp":122329970382,"id":84,"parentId":45,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":851740,"timestamp":122329959442,"id":45,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778930302206,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":861494,"timestamp":122329970325,"id":79,"parentId":39,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":873279,"timestamp":122329958610,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":865466,"timestamp":122329970349,"id":81,"parentId":42,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":876963,"timestamp":122329958933,"id":42,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":864031,"timestamp":122329973751,"id":91,"parentId":24,"tags":{},"startTime":1778930302220,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":886200,"timestamp":122329951639,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778930302198,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":867598,"timestamp":122329970456,"id":90,"parentId":51,"tags":{},"startTime":1778930302217,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":876530,"timestamp":122329961567,"id":51,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":875677,"timestamp":122329969310,"id":68,"parentId":27,"tags":{},"startTime":1778930302216,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":890580,"timestamp":122329954487,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778930302201,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":879430,"timestamp":122329975705,"id":93,"parentId":41,"tags":{},"startTime":1778930302222,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":896454,"timestamp":122329958734,"id":41,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1778930302205,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":907754,"timestamp":122329969902,"id":72,"parentId":32,"tags":{},"startTime":1778930302216,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":920049,"timestamp":122329957673,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778930302204,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":910110,"timestamp":122329974845,"id":92,"parentId":31,"tags":{},"startTime":1778930302221,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":927658,"timestamp":122329957402,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778930302204,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":911659,"timestamp":122329987253,"id":99,"parentId":56,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":936603,"timestamp":122329962379,"id":56,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778930302209,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":917351,"timestamp":122329987262,"id":100,"parentId":58,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":941700,"timestamp":122329962969,"id":58,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778930302209,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":924976,"timestamp":122329987385,"id":101,"parentId":59,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":949286,"timestamp":122329963136,"id":59,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778930302209,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":926527,"timestamp":122329987226,"id":97,"parentId":54,"tags":{},"startTime":1778930302233,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":951740,"timestamp":122329962080,"id":54,"parentId":19,"tags":{"page":"/messages"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":936360,"timestamp":122329987416,"id":103,"parentId":62,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":960174,"timestamp":122329963657,"id":62,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778930302210,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":955062,"timestamp":122329969085,"id":66,"parentId":25,"tags":{},"startTime":1778930302215,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":969976,"timestamp":122329954219,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778930302200,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":945661,"timestamp":122329987431,"id":104,"parentId":63,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":969413,"timestamp":122329963748,"id":63,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778930302210,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":939909,"timestamp":122329999528,"id":106,"parentId":57,"tags":{},"startTime":1778930302246,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":976893,"timestamp":122329962590,"id":57,"parentId":19,"tags":{"page":"/"},"startTime":1778930302209,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":954651,"timestamp":122329987406,"id":102,"parentId":61,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":978547,"timestamp":122329963560,"id":61,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778930302210,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":958177,"timestamp":122329987238,"id":98,"parentId":55,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":983237,"timestamp":122329962222,"id":55,"parentId":19,"tags":{"page":"/node"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":960457,"timestamp":122329987203,"id":95,"parentId":52,"tags":{},"startTime":1778930302233,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":985857,"timestamp":122329961844,"id":52,"parentId":19,"tags":{"page":"/login"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":967852,"timestamp":122329987166,"id":94,"parentId":23,"tags":{},"startTime":1778930302233,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":1003656,"timestamp":122329951413,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778930302198,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":971347,"timestamp":122329987213,"id":96,"parentId":53,"tags":{},"startTime":1778930302233,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":996667,"timestamp":122329961941,"id":53,"parentId":19,"tags":{"page":"/logs"},"startTime":1778930302208,"traceId":"0833df250a0c9aa5"},{"name":"is-page-static","duration":1017092,"timestamp":122329987444,"id":105,"parentId":60,"tags":{},"startTime":1778930302234,"traceId":"0833df250a0c9aa5"},{"name":"check-page","duration":1041342,"timestamp":122329963277,"id":60,"parentId":19,"tags":{"page":"/settings"},"startTime":1778930302210,"traceId":"0833df250a0c9aa5"},{"name":"static-check","duration":1058175,"timestamp":122329946501,"id":19,"parentId":1,"tags":{},"startTime":1778930302193,"traceId":"0833df250a0c9aa5"}]
|
|
2
|
+
[{"name":"write-routes-manifest","duration":555,"timestamp":122331014385,"id":108,"parentId":1,"tags":{},"startTime":1778930303261,"traceId":"0833df250a0c9aa5"},{"name":"load-dotenv","duration":60,"timestamp":122331027834,"id":111,"parentId":110,"tags":{},"startTime":1778930303274,"traceId":"0833df250a0c9aa5"},{"name":"run-export-path-map","duration":555,"timestamp":122331031117,"id":112,"parentId":110,"tags":{},"startTime":1778930303277,"traceId":"0833df250a0c9aa5"},{"name":"next-export","duration":686288,"timestamp":122331026337,"id":110,"parentId":1,"tags":{},"startTime":1778930303273,"traceId":"0833df250a0c9aa5"},{"name":"move-exported-app-not-found-","duration":537,"timestamp":122331715846,"id":113,"parentId":109,"tags":{},"startTime":1778930303962,"traceId":"0833df250a0c9aa5"},{"name":"move-exported-app-global-error-","duration":549,"timestamp":122331716497,"id":114,"parentId":109,"tags":{},"startTime":1778930303963,"traceId":"0833df250a0c9aa5"},{"name":"static-generation","duration":699580,"timestamp":122331019892,"id":109,"parentId":1,"tags":{},"startTime":1778930303266,"traceId":"0833df250a0c9aa5"},{"name":"write-routes-manifest","duration":591,"timestamp":122331719812,"id":115,"parentId":1,"tags":{},"startTime":1778930303966,"traceId":"0833df250a0c9aa5"},{"name":"print-tree-view","duration":5450,"timestamp":122331731045,"id":116,"parentId":1,"tags":{},"startTime":1778930303977,"traceId":"0833df250a0c9aa5"},{"name":"write-route-bundle-stats","duration":20046,"timestamp":122331736542,"id":117,"parentId":1,"tags":{},"startTime":1778930303983,"traceId":"0833df250a0c9aa5"},{"name":"telemetry-flush","duration":16026,"timestamp":122331756637,"id":118,"parentId":1,"tags":{},"startTime":1778930304003,"traceId":"0833df250a0c9aa5"},{"name":"next-build","duration":20788184,"timestamp":122310984527,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778930283231,"traceId":"0833df250a0c9aa5"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":7563636,"timestamp":122311250646,"id":14,"parentId":1,"tags":{},"startTime":1778930283497,"traceId":"0833df250a0c9aa5"},{"name":"turbopack-build-events","duration":121,"timestamp":122311593363,"id":15,"parentId":1,"tags":{},"startTime":1778930283840,"traceId":"0833df250a0c9aa5"},{"name":"run-typescript","duration":10884268,"timestamp":122318858626,"id":16,"parentId":1,"tags":{},"startTime":1778930291105,"traceId":"0833df250a0c9aa5"},{"name":"static-check","duration":1058175,"timestamp":122329946501,"id":19,"parentId":1,"tags":{},"startTime":1778930302193,"traceId":"0833df250a0c9aa5"},{"name":"static-generation","duration":699580,"timestamp":122331019892,"id":109,"parentId":1,"tags":{},"startTime":1778930303266,"traceId":"0833df250a0c9aa5"},{"name":"telemetry-flush","duration":16026,"timestamp":122331756637,"id":118,"parentId":1,"tags":{},"startTime":1778930304003,"traceId":"0833df250a0c9aa5"},{"name":"next-build","duration":20788184,"timestamp":122310984527,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778930283231,"traceId":"0833df250a0c9aa5"}]
|
|
@@ -15,7 +15,72 @@ async function hubHeaders(): Promise<Record<string, string>> {
|
|
|
15
15
|
* agent_count, status). Per issue #119; lands in v0.8.1-preview.2 of the
|
|
16
16
|
* commhub-server (通信牛). The dashboard <ServersDrawer> mounts in
|
|
17
17
|
* AppShell and refreshes every 5s when expanded.
|
|
18
|
+
*
|
|
19
|
+
* v0.10.0 Hero 1+2 — normalization layer. commhub-server@0.8.1-preview.5
|
|
20
|
+
* (LOCAL hub upgraded 2026-05-16 per 通信龙 d627eca7) returns:
|
|
21
|
+
* raw array `[{hostname, ip, agent_count, cpu_load_1min, cpu_cores,
|
|
22
|
+
* mem_avail_gb, mem_used_gb, last_seen}, ...]`
|
|
23
|
+
* — without the `{servers: [...]}` envelope the dashboard's ServersDrawer
|
|
24
|
+
* expects. Also uses `mem_avail_gb` instead of `mem_total_gb`. This
|
|
25
|
+
* proxy normalizes both:
|
|
26
|
+
* 1. Wraps raw array in `{servers: [...]}` envelope. If hub later
|
|
27
|
+
* switches to that shape natively, the pass-through still works.
|
|
28
|
+
* 2. Computes `mem_total_gb = mem_used_gb + mem_avail_gb` when the
|
|
29
|
+
* hub reports avail instead of total (older shape).
|
|
30
|
+
* 3. Marks server `status: 'online'|'offline'` from last_seen freshness
|
|
31
|
+
* (within 60s = online). Hub doesn't carry an explicit status
|
|
32
|
+
* field in 0.8.1-preview.5.
|
|
18
33
|
*/
|
|
34
|
+
|
|
35
|
+
interface HubServerRow {
|
|
36
|
+
hostname: string;
|
|
37
|
+
ip?: string | null;
|
|
38
|
+
agent_count?: number;
|
|
39
|
+
cpu_load_1min?: number | null;
|
|
40
|
+
cpu_cores?: number | null;
|
|
41
|
+
mem_used_gb?: number | null;
|
|
42
|
+
mem_total_gb?: number | null;
|
|
43
|
+
mem_avail_gb?: number | null;
|
|
44
|
+
disk_used_gb?: number | null;
|
|
45
|
+
disk_total_gb?: number | null;
|
|
46
|
+
cpu_history?: number[];
|
|
47
|
+
mem_history?: number[];
|
|
48
|
+
agents?: unknown[];
|
|
49
|
+
last_seen?: string | null;
|
|
50
|
+
status?: 'online' | 'offline';
|
|
51
|
+
note?: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function freshnessStatus(lastSeen: string | null | undefined): 'online' | 'offline' {
|
|
55
|
+
if (!lastSeen) return 'offline';
|
|
56
|
+
const t = Date.parse(lastSeen);
|
|
57
|
+
if (Number.isNaN(t)) return 'offline';
|
|
58
|
+
return Date.now() - t < 60_000 ? 'online' : 'offline';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function normalizeServer(row: HubServerRow) {
|
|
62
|
+
const memTotal = row.mem_total_gb ??
|
|
63
|
+
(row.mem_used_gb != null && row.mem_avail_gb != null
|
|
64
|
+
? row.mem_used_gb + row.mem_avail_gb
|
|
65
|
+
: null);
|
|
66
|
+
return {
|
|
67
|
+
hostname: row.hostname,
|
|
68
|
+
ip: row.ip ?? null,
|
|
69
|
+
agent_count: row.agent_count ?? 0,
|
|
70
|
+
cpu_load_1min: row.cpu_load_1min ?? null,
|
|
71
|
+
cpu_cores: row.cpu_cores ?? 0,
|
|
72
|
+
mem_used_gb: row.mem_used_gb ?? null,
|
|
73
|
+
mem_total_gb: memTotal,
|
|
74
|
+
disk_used_gb: row.disk_used_gb ?? null,
|
|
75
|
+
disk_total_gb: row.disk_total_gb ?? null,
|
|
76
|
+
cpu_history: row.cpu_history,
|
|
77
|
+
mem_history: row.mem_history,
|
|
78
|
+
agents: row.agents,
|
|
79
|
+
status: row.status ?? freshnessStatus(row.last_seen),
|
|
80
|
+
note: row.note,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
19
84
|
export async function GET() {
|
|
20
85
|
const authFailure = await requireDashboardAuth();
|
|
21
86
|
if (authFailure) return authFailure;
|
|
@@ -32,7 +97,18 @@ export async function GET() {
|
|
|
32
97
|
if (res.status === 404) return Response.json({ servers: [], unavailable: true });
|
|
33
98
|
return Response.json({ error: `hub ${res.status}` }, { status: res.status });
|
|
34
99
|
}
|
|
35
|
-
|
|
100
|
+
const raw = await res.json();
|
|
101
|
+
// Accept both shapes: bare array (0.8.1-preview.5) or {servers: [...]}
|
|
102
|
+
// wrapper (future hub revisions).
|
|
103
|
+
const rows: HubServerRow[] = Array.isArray(raw)
|
|
104
|
+
? raw
|
|
105
|
+
: Array.isArray(raw?.servers)
|
|
106
|
+
? raw.servers
|
|
107
|
+
: [];
|
|
108
|
+
return Response.json({
|
|
109
|
+
servers: rows.map(normalizeServer),
|
|
110
|
+
unavailable: raw?.unavailable === true,
|
|
111
|
+
});
|
|
36
112
|
} catch (e: unknown) {
|
|
37
113
|
return Response.json({ error: 'hub unreachable', detail: e instanceof Error ? e.message : String(e) }, { status: 502 });
|
|
38
114
|
}
|
|
@@ -2128,7 +2128,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
2128
2128
|
cursor: 'pointer',
|
|
2129
2129
|
}}
|
|
2130
2130
|
>
|
|
2131
|
-
<span><span className="hidden sm:inline" data-filter-prefix>filter: </span>{pinnedStatus}<span className="opacity-70"> · {matchCount}</span></span>
|
|
2131
|
+
<span><span className="hidden sm:inline" data-filter-prefix>filter: </span>{pinnedStatus}<span className="opacity-70 tabular-nums" data-filter-pill-count> · {matchCount}</span></span>
|
|
2132
2132
|
<button
|
|
2133
2133
|
type="button"
|
|
2134
2134
|
aria-label={`Clear ${pinnedStatus} filter`}
|
|
@@ -2162,7 +2162,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
2162
2162
|
cursor: 'pointer',
|
|
2163
2163
|
}}
|
|
2164
2164
|
>
|
|
2165
|
-
<span><span className="hidden sm:inline" data-filter-prefix>filter: </span>{pinnedGroup}<span className="opacity-70"> · {matchCount}</span></span>
|
|
2165
|
+
<span><span className="hidden sm:inline" data-filter-prefix>filter: </span>{pinnedGroup}<span className="opacity-70 tabular-nums" data-filter-pill-count> · {matchCount}</span></span>
|
|
2166
2166
|
<button
|
|
2167
2167
|
type="button"
|
|
2168
2168
|
aria-label={`Clear group filter ${pinnedGroup}`}
|
|
@@ -2212,7 +2212,7 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
2212
2212
|
cursor: 'pointer',
|
|
2213
2213
|
}}
|
|
2214
2214
|
>
|
|
2215
|
-
<span><span className="hidden sm:inline" data-filter-prefix>filter: </span>{pinnedVendor}<span className="opacity-70"> · {matchCount}</span></span>
|
|
2215
|
+
<span><span className="hidden sm:inline" data-filter-prefix>filter: </span>{pinnedVendor}<span className="opacity-70 tabular-nums" data-filter-pill-count> · {matchCount}</span></span>
|
|
2216
2216
|
<button
|
|
2217
2217
|
type="button"
|
|
2218
2218
|
aria-label={`Clear vendor filter ${pinnedVendor}`}
|
|
@@ -2263,16 +2263,29 @@ export function TopoGraph({ sessions, sseSessions, renameSignal }: TopoGraphProp
|
|
|
2263
2263
|
<span>
|
|
2264
2264
|
<span className="hidden sm:inline" data-filter-prefix>filter: </span>
|
|
2265
2265
|
{link.from}→{link.to}
|
|
2266
|
+
{/* Round 323 / Loop: edge filter pill count digit picks
|
|
2267
|
+
up tabular-nums (Tailwind class on both cold +
|
|
2268
|
+
hot branches). Sibling treatment to the status /
|
|
2269
|
+
group / vendor pin pills (R323 replace_all upstream
|
|
2270
|
+
in this same round added `tabular-nums` to those
|
|
2271
|
+
three pills' count spans). Pre-R323 a matchCount /
|
|
2272
|
+
link.count crossing 9→10 widened the digit and
|
|
2273
|
+
shifted the trailing × button right ~3px in font-
|
|
2274
|
+
mono (mono digits still have natural-vs-tabular
|
|
2275
|
+
variance). Locks the slot so the × button stays
|
|
2276
|
+
planted as the count grows. 9th surface in the
|
|
2277
|
+
info-density tabular-nums sweep after R322 panel
|
|
2278
|
+
hot count. */}
|
|
2266
2279
|
{isHot ? (
|
|
2267
2280
|
<span
|
|
2268
|
-
className="opacity-90"
|
|
2281
|
+
className="opacity-90 tabular-nums"
|
|
2269
2282
|
style={{ color: hotStroke, fontWeight: 700 }}
|
|
2270
2283
|
data-active-filter-edge-count-hot
|
|
2271
2284
|
>
|
|
2272
2285
|
{' · '}{link.count}
|
|
2273
2286
|
</span>
|
|
2274
2287
|
) : (
|
|
2275
|
-
<span className="opacity-70" data-active-filter-edge-count>
|
|
2288
|
+
<span className="opacity-70 tabular-nums" data-active-filter-edge-count>
|
|
2276
2289
|
{' · '}{link.count}
|
|
2277
2290
|
</span>
|
|
2278
2291
|
)}
|
package/package.json
CHANGED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/* Round 323 verification: filter pin pill count spans (status /
|
|
2
|
+
* group / vendor) AND edge filter pill count (cold + hot) all pick
|
|
3
|
+
* up Tailwind `tabular-nums` class. Pre-R323 the count digit
|
|
4
|
+
* (matchCount or link.count) widened 9→10 / 99→100 even in font-mono
|
|
5
|
+
* because mono fonts still have natural-vs-tabular variance; the
|
|
6
|
+
* trailing × clear-button shifted right a couple px.
|
|
7
|
+
*
|
|
8
|
+
* 9th surface in the info-density tabular-nums sweep:
|
|
9
|
+
* R224 edge badge
|
|
10
|
+
* R225 hub digit / panel flows-count / recent-row count
|
|
11
|
+
* R229 group-label count
|
|
12
|
+
* R230 group-label status pips
|
|
13
|
+
* R320 recent-row count fw=600 (left neighbour)
|
|
14
|
+
* R321 recent-row timestamp
|
|
15
|
+
* R322 panel hot count
|
|
16
|
+
* R323 filter pill counts (status + group + vendor + edge×2)
|
|
17
|
+
*
|
|
18
|
+
* Contract:
|
|
19
|
+
* - All 5 patterns gain `tabular-nums`. We can probe via a
|
|
20
|
+
* scenario that activates the status pin (simplest), then
|
|
21
|
+
* check the resulting [data-filter-pill-count] element.
|
|
22
|
+
* - Each `[data-filter-pill-count]` has computed
|
|
23
|
+
* fontVariantNumeric containing 'tabular-nums'.
|
|
24
|
+
* - The edge pill count test is best-effort — only active when
|
|
25
|
+
* a flow is pinned via R116; we don't simulate pin in this
|
|
26
|
+
* test, so we accept its absence.
|
|
27
|
+
* - R322 hot tabular + R321 ts tabular regressions intact.
|
|
28
|
+
* - R317/R318/R294 chrome + pulse regressions intact.
|
|
29
|
+
*
|
|
30
|
+
* Fixture: 2 working sessions, 2 idle sessions — pin status='idle'
|
|
31
|
+
* via initial localStorage so the status filter pill is visible.
|
|
32
|
+
*/
|
|
33
|
+
import { chromium } from 'playwright';
|
|
34
|
+
import { readFileSync } from 'node:fs';
|
|
35
|
+
|
|
36
|
+
const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
|
|
37
|
+
const browser = await chromium.launch({ headless: true });
|
|
38
|
+
const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
|
|
39
|
+
await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
|
|
40
|
+
await ctx.addInitScript(() => {
|
|
41
|
+
try {
|
|
42
|
+
localStorage.setItem('anet-theme', 'cyber');
|
|
43
|
+
sessionStorage.setItem('anet_v3_auth', '1');
|
|
44
|
+
} catch {}
|
|
45
|
+
});
|
|
46
|
+
const fresh = new Date(Date.now() - 60 * 1000).toISOString();
|
|
47
|
+
await ctx.route('**/api/hub/status*', async (route) => {
|
|
48
|
+
const r = await route.fetch();
|
|
49
|
+
const b = await r.json();
|
|
50
|
+
const nid = (b.sessions || [])[0]?.network_id || 'default';
|
|
51
|
+
const mk = (alias, status) => ({
|
|
52
|
+
alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
|
|
53
|
+
network_id: nid, project_dir: null,
|
|
54
|
+
created_at: fresh, updated_at: fresh, last_seen_at: fresh,
|
|
55
|
+
});
|
|
56
|
+
await route.fulfill({ response: r, json: { ...b, sessions: [
|
|
57
|
+
mk('alpha-1', 'working'),
|
|
58
|
+
mk('alpha-2', 'idle'),
|
|
59
|
+
mk('beta-1', 'working'),
|
|
60
|
+
mk('beta-2', 'idle'),
|
|
61
|
+
] } });
|
|
62
|
+
});
|
|
63
|
+
await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
|
|
64
|
+
await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
|
|
65
|
+
|
|
66
|
+
const page = await ctx.newPage();
|
|
67
|
+
await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
|
|
68
|
+
await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 20000 });
|
|
69
|
+
await page.waitForTimeout(300);
|
|
70
|
+
|
|
71
|
+
// Programmatically trigger a status pin by clicking on the working
|
|
72
|
+
// status legend row. R64 pin handler responds to legend clicks.
|
|
73
|
+
// Best-effort: if the click target is not exposed, fall back to
|
|
74
|
+
// the chip-row "working chip" click which also triggers pinning.
|
|
75
|
+
await page.click('[data-working-chip]', { delay: 50 }).catch(() => {});
|
|
76
|
+
await page.waitForTimeout(400);
|
|
77
|
+
|
|
78
|
+
const probe = await page.evaluate(() => {
|
|
79
|
+
const pillCounts = Array.from(document.querySelectorAll('[data-filter-pill-count]'));
|
|
80
|
+
const edgeColdCount = document.querySelector('[data-active-filter-edge-count]');
|
|
81
|
+
const edgeHotCount = document.querySelector('[data-active-filter-edge-count-hot]');
|
|
82
|
+
const recentRowTs = document.querySelector('[data-recent-row-ts]');
|
|
83
|
+
const recentRowCount = document.querySelector('[data-recent-row-count]');
|
|
84
|
+
const recentPanelHot = document.querySelector('[data-recent-panel-hot-count]');
|
|
85
|
+
|
|
86
|
+
const cs = (el) => el ? getComputedStyle(el).fontVariantNumeric : null;
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
pillCount: pillCounts.length,
|
|
90
|
+
pillCountAllTabular: pillCounts.every(p => /tabular-nums/.test(getComputedStyle(p).fontVariantNumeric || '')),
|
|
91
|
+
pillTexts: pillCounts.map(p => p.textContent),
|
|
92
|
+
edgeColdTabular: edgeColdCount ? cs(edgeColdCount) : null,
|
|
93
|
+
edgeHotTabular: edgeHotCount ? cs(edgeHotCount) : null,
|
|
94
|
+
edgeColdClass: edgeColdCount?.className ?? null,
|
|
95
|
+
edgeHotClass: edgeHotCount?.className ?? null,
|
|
96
|
+
recentRowTsTabular: cs(recentRowTs),
|
|
97
|
+
recentRowCountFw: recentRowCount ? getComputedStyle(recentRowCount).fontWeight : null,
|
|
98
|
+
recentPanelHotTab: cs(recentPanelHot),
|
|
99
|
+
layoutInactiveCls: document.querySelector('[data-topo-chrome-layout="grid"]')?.className ?? '',
|
|
100
|
+
layoutActiveCls: document.querySelector('[data-topo-chrome-layout="ring"]')?.className ?? '',
|
|
101
|
+
pulseCount: document.querySelectorAll('[data-pulse-wrapper]').length,
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
await browser.close();
|
|
105
|
+
|
|
106
|
+
const hasTab = (s) => /tabular-nums/.test(s || '');
|
|
107
|
+
const classHasTab = (s) => /tabular-nums/.test(s || '');
|
|
108
|
+
|
|
109
|
+
const results = {
|
|
110
|
+
// At least one filter pill count visible after click (the status pin).
|
|
111
|
+
pill_count_present: probe.pillCount >= 1,
|
|
112
|
+
pill_count_all_tabular: probe.pillCountAllTabular,
|
|
113
|
+
// The edge pills are not triggered in this test, but their CLASS
|
|
114
|
+
// attribute should already include `tabular-nums` from R323 even
|
|
115
|
+
// if not rendered (best-effort source-level probe via a snapshot
|
|
116
|
+
// of an active pill is not possible without simulating R116 pin).
|
|
117
|
+
// We accept presence-or-absence here; the main contract is the
|
|
118
|
+
// status/group/vendor pills.
|
|
119
|
+
// R322 / R321 regressions — both surfaces depend on recent-signal
|
|
120
|
+
// panel rendering, which requires messages. Fixture here has zero
|
|
121
|
+
// messages (only sessions for the pin click), so accept null OR
|
|
122
|
+
// tabular for both. The R322 regression is primarily covered by
|
|
123
|
+
// topo-recent-panel-hot-tabular-test which forces messages.
|
|
124
|
+
r322_panel_hot_tabular_or_absent: probe.recentPanelHotTab === null || hasTab(probe.recentPanelHotTab),
|
|
125
|
+
r321_ts_tabular_or_absent: probe.recentRowTsTabular === null || hasTab(probe.recentRowTsTabular),
|
|
126
|
+
// R317/R318 chrome regression.
|
|
127
|
+
r317_inactive_gray_400: probe.layoutInactiveCls.includes('text-gray-400'),
|
|
128
|
+
r318_active_font_medium: probe.layoutActiveCls.includes('font-medium'),
|
|
129
|
+
r294_pulse_absent: probe.pulseCount === 0,
|
|
130
|
+
};
|
|
131
|
+
const ok = Object.values(results).every(Boolean);
|
|
132
|
+
console.log(`${ok ? '✅' : '❌'} filter pill count tabular:`, JSON.stringify(results),
|
|
133
|
+
'\n pill count visible:', probe.pillCount,
|
|
134
|
+
'\n pill texts:', probe.pillTexts);
|
|
135
|
+
process.exit(ok ? 0 : 1);
|
|
File without changes
|
/package/.next/static/{5LdAxDjnLcwVdWMm8Id_r → s5Iteo_lZIHlLuHW2r0KA}/_clientMiddlewareManifest.js
RENAMED
|
File without changes
|
|
File without changes
|