@sleep2agi/agent-network-dashboard 0.4.5-preview.53 → 0.4.5-preview.55
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/prerender-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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- 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 +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +2 -2
- package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- 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 +3 -3
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- 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 +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +2 -2
- package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +2 -2
- package/.next/server/app/messages.rsc +2 -2
- package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +2 -2
- package/.next/server/app/node.rsc +2 -2
- package/.next/server/app/node.segments/_full.segment.rsc +2 -2
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +2 -2
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +2 -2
- package/.next/server/app/nodes.rsc +2 -2
- package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +2 -2
- package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +2 -2
- package/.next/server/app/settings/networks.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- 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 +3 -3
- package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- 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/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +2 -2
- package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- 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/_0nne7mz._.js +1 -1
- package/.next/server/chunks/ssr/_0nne7mz._.js.map +1 -1
- package/.next/server/chunks/ssr/app_0aum_g5._.js +1 -1
- package/.next/server/chunks/ssr/app_0aum_g5._.js.map +1 -1
- package/.next/server/chunks/ssr/app_0esuljp._.js +1 -1
- package/.next/server/chunks/ssr/app_0esuljp._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/023enh~oz30n..js +1 -0
- package/.next/static/chunks/09.q998r20bia.css +2 -0
- package/.next/static/chunks/{0pypssqeitz11.js → 12t1_mg2g~qr~.js} +1 -1
- package/.next/static/chunks/{15hz38flsqkl6.js → 14gcp0d-_bf-n.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/StatsBar.tsx +59 -36
- package/package.json +1 -1
- package/scripts/loop-review.mjs +120 -42
- package/.next/static/chunks/000qcyr-yo73c.css +0 -2
- package/.next/static/chunks/120_ivsobv54t.js +0 -1
- /package/.next/static/{aMUVvHhZSjksmj5wMoKrM → TgtbxBEQuLKKI4SW96OrQ}/_buildManifest.js +0 -0
- /package/.next/static/{aMUVvHhZSjksmj5wMoKrM → TgtbxBEQuLKKI4SW96OrQ}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{aMUVvHhZSjksmj5wMoKrM → TgtbxBEQuLKKI4SW96OrQ}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94867,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.5-preview.
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94867,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.4.5-preview.55"],94867)},89954,e=>{"use strict";var t=e.i(18050),r=e.i(71645),a=e.i(94867);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);
|
package/.next/trace
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":306,"timestamp":218202801565,"id":4,"parentId":1,"tags":{},"startTime":1778589688626,"traceId":"24a9feed7fa6a39f"},{"name":"load-custom-routes","duration":474,"timestamp":218202802047,"id":5,"parentId":1,"tags":{},"startTime":1778589688627,"traceId":"24a9feed7fa6a39f"},{"name":"create-dist-dir","duration":792,"timestamp":218202802565,"id":6,"parentId":1,"tags":{},"startTime":1778589688627,"traceId":"24a9feed7fa6a39f"},{"name":"clean","duration":604,"timestamp":218202804077,"id":7,"parentId":1,"tags":{},"startTime":1778589688629,"traceId":"24a9feed7fa6a39f"},{"name":"discover-routes","duration":9401,"timestamp":218202907730,"id":8,"parentId":1,"tags":{},"startTime":1778589688732,"traceId":"24a9feed7fa6a39f"},{"name":"create-root-mapping","duration":131,"timestamp":218202917195,"id":9,"parentId":1,"tags":{},"startTime":1778589688742,"traceId":"24a9feed7fa6a39f"},{"name":"generate-route-types","duration":20838,"timestamp":218202919772,"id":10,"parentId":1,"tags":{},"startTime":1778589688744,"traceId":"24a9feed7fa6a39f"},{"name":"public-dir-conflict-check","duration":227,"timestamp":218202940741,"id":11,"parentId":1,"tags":{},"startTime":1778589688765,"traceId":"24a9feed7fa6a39f"},{"name":"generate-routes-manifest","duration":8043,"timestamp":218202941127,"id":12,"parentId":1,"tags":{},"startTime":1778589688766,"traceId":"24a9feed7fa6a39f"},{"name":"run-turbopack","duration":8645691,"timestamp":218202967263,"id":14,"parentId":1,"tags":{},"startTime":1778589688792,"traceId":"24a9feed7fa6a39f"},{"name":"turbopack-build-events","duration":82,"timestamp":218203266253,"id":15,"parentId":1,"tags":{},"startTime":1778589689091,"traceId":"24a9feed7fa6a39f"},{"name":"run-typescript","duration":8049081,"timestamp":218211623091,"id":16,"parentId":1,"tags":{},"startTime":1778589697448,"traceId":"24a9feed7fa6a39f"},{"name":"generate-required-server-files","duration":3182,"timestamp":218219673179,"id":18,"parentId":1,"tags":{},"startTime":1778589705498,"traceId":"24a9feed7fa6a39f"},{"name":"check-static-error-page","duration":17734,"timestamp":218219751669,"id":20,"parentId":19,"tags":{},"startTime":1778589705576,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":328800,"timestamp":218219773622,"id":62,"parentId":22,"tags":{},"startTime":1778589705598,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":348487,"timestamp":218219754063,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778589705579,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":461829,"timestamp":218219774475,"id":64,"parentId":26,"tags":{},"startTime":1778589705599,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":478312,"timestamp":218219758081,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778589705583,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":467713,"timestamp":218219774544,"id":65,"parentId":27,"tags":{},"startTime":1778589705599,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":484041,"timestamp":218219758275,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778589705583,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":474474,"timestamp":218219774597,"id":66,"parentId":28,"tags":{},"startTime":1778589705599,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":489365,"timestamp":218219759784,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778589705584,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":479539,"timestamp":218219774635,"id":67,"parentId":29,"tags":{},"startTime":1778589705599,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":494082,"timestamp":218219760158,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778589705585,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":485548,"timestamp":218219774669,"id":68,"parentId":30,"tags":{},"startTime":1778589705599,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":499804,"timestamp":218219760476,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778589705585,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":487084,"timestamp":218219774705,"id":69,"parentId":32,"tags":{},"startTime":1778589705599,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":500278,"timestamp":218219761556,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778589705586,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":490427,"timestamp":218219774835,"id":70,"parentId":33,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":503518,"timestamp":218219761783,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778589705586,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":494000,"timestamp":218219774885,"id":71,"parentId":34,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":507104,"timestamp":218219761963,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778589705587,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":496910,"timestamp":218219773269,"id":61,"parentId":21,"tags":{},"startTime":1778589705598,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":517478,"timestamp":218219752735,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778589705577,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":497939,"timestamp":218219774901,"id":72,"parentId":35,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":510675,"timestamp":218219762210,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778589705587,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":501398,"timestamp":218219774974,"id":74,"parentId":37,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":512867,"timestamp":218219763547,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778589705588,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":505555,"timestamp":218219774982,"id":75,"parentId":38,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":516868,"timestamp":218219763726,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778589705588,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":509757,"timestamp":218219774988,"id":76,"parentId":39,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":520986,"timestamp":218219763806,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778589705588,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":522051,"timestamp":218219774994,"id":77,"parentId":40,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":533243,"timestamp":218219763882,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":523517,"timestamp":218219775012,"id":78,"parentId":41,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":534634,"timestamp":218219763955,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":528469,"timestamp":218219775018,"id":79,"parentId":42,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":539396,"timestamp":218219764152,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":531595,"timestamp":218219773695,"id":63,"parentId":25,"tags":{},"startTime":1778589705598,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":548465,"timestamp":218219756871,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778589705582,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":536866,"timestamp":218219775033,"id":81,"parentId":44,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":547593,"timestamp":218219764362,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":537670,"timestamp":218219775027,"id":80,"parentId":43,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":548491,"timestamp":218219764250,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":540977,"timestamp":218219775045,"id":83,"parentId":46,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":551446,"timestamp":218219764622,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":545711,"timestamp":218219775049,"id":84,"parentId":47,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":556115,"timestamp":218219764705,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":549414,"timestamp":218219775055,"id":85,"parentId":48,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":559707,"timestamp":218219764810,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778589705590,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":551553,"timestamp":218219779337,"id":86,"parentId":24,"tags":{},"startTime":1778589705604,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":576299,"timestamp":218219754643,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778589705579,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":560016,"timestamp":218219775039,"id":82,"parentId":45,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":570644,"timestamp":218219764463,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778589705589,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":552586,"timestamp":218219783204,"id":87,"parentId":31,"tags":{},"startTime":1778589705608,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":575222,"timestamp":218219760610,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778589705585,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":586634,"timestamp":218219774955,"id":73,"parentId":36,"tags":{},"startTime":1778589705600,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":598980,"timestamp":218219762671,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778589705587,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":564895,"timestamp":218219804275,"id":90,"parentId":50,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":603799,"timestamp":218219765429,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778589705590,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":570314,"timestamp":218219804286,"id":91,"parentId":51,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":609048,"timestamp":218219765608,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778589705590,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":575428,"timestamp":218219804294,"id":92,"parentId":52,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":613966,"timestamp":218219765812,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778589705591,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":576685,"timestamp":218219804267,"id":89,"parentId":49,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":615749,"timestamp":218219765244,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778589705590,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":580946,"timestamp":218219804300,"id":93,"parentId":53,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":619245,"timestamp":218219766044,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778589705591,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":582751,"timestamp":218219804309,"id":94,"parentId":55,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":620326,"timestamp":218219766799,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778589705591,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":586914,"timestamp":218219804317,"id":95,"parentId":56,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":624300,"timestamp":218219766978,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778589705592,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":588267,"timestamp":218219804323,"id":96,"parentId":58,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":623653,"timestamp":218219768975,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778589705594,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":590751,"timestamp":218219804225,"id":88,"parentId":23,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":640669,"timestamp":218219754358,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778589705579,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":596111,"timestamp":218219804338,"id":98,"parentId":60,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":631300,"timestamp":218219769206,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778589705594,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":597418,"timestamp":218219804350,"id":99,"parentId":57,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":634642,"timestamp":218219767165,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778589705592,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":586010,"timestamp":218219819298,"id":100,"parentId":54,"tags":{},"startTime":1778589705644,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":639058,"timestamp":218219766285,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778589705591,"traceId":"24a9feed7fa6a39f"},{"name":"is-page-static","duration":602471,"timestamp":218219804331,"id":97,"parentId":59,"tags":{},"startTime":1778589705629,"traceId":"24a9feed7fa6a39f"},{"name":"check-page","duration":637741,"timestamp":218219769105,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778589705594,"traceId":"24a9feed7fa6a39f"},{"name":"static-check","duration":656021,"timestamp":218219750853,"id":19,"parentId":1,"tags":{},"startTime":1778589705576,"traceId":"24a9feed7fa6a39f"},{"name":"write-routes-manifest","duration":456,"timestamp":218220413686,"id":102,"parentId":1,"tags":{},"startTime":1778589706238,"traceId":"24a9feed7fa6a39f"},{"name":"load-dotenv","duration":53,"timestamp":218220426695,"id":105,"parentId":104,"tags":{},"startTime":1778589706251,"traceId":"24a9feed7fa6a39f"},{"name":"run-export-path-map","duration":644,"timestamp":218220429778,"id":106,"parentId":104,"tags":{},"startTime":1778589706254,"traceId":"24a9feed7fa6a39f"},{"name":"next-export","duration":610245,"timestamp":218220425363,"id":104,"parentId":1,"tags":{},"startTime":1778589706250,"traceId":"24a9feed7fa6a39f"},{"name":"move-exported-app-not-found-","duration":862,"timestamp":218221039827,"id":107,"parentId":103,"tags":{},"startTime":1778589706865,"traceId":"24a9feed7fa6a39f"},{"name":"move-exported-app-global-error-","duration":570,"timestamp":218221040794,"id":108,"parentId":103,"tags":{},"startTime":1778589706865,"traceId":"24a9feed7fa6a39f"}]
|
|
2
|
-
[{"name":"static-generation","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":348,"timestamp":218781526955,"id":4,"parentId":1,"tags":{},"startTime":1778590267352,"traceId":"1737638a0bd95782"},{"name":"load-custom-routes","duration":664,"timestamp":218781527470,"id":5,"parentId":1,"tags":{},"startTime":1778590267352,"traceId":"1737638a0bd95782"},{"name":"create-dist-dir","duration":370,"timestamp":218781528184,"id":6,"parentId":1,"tags":{},"startTime":1778590267353,"traceId":"1737638a0bd95782"},{"name":"clean","duration":579,"timestamp":218781529305,"id":7,"parentId":1,"tags":{},"startTime":1778590267354,"traceId":"1737638a0bd95782"},{"name":"discover-routes","duration":9630,"timestamp":218781620787,"id":8,"parentId":1,"tags":{},"startTime":1778590267445,"traceId":"1737638a0bd95782"},{"name":"create-root-mapping","duration":161,"timestamp":218781630490,"id":9,"parentId":1,"tags":{},"startTime":1778590267455,"traceId":"1737638a0bd95782"},{"name":"generate-route-types","duration":36275,"timestamp":218781633081,"id":10,"parentId":1,"tags":{},"startTime":1778590267458,"traceId":"1737638a0bd95782"},{"name":"public-dir-conflict-check","duration":121,"timestamp":218781669535,"id":11,"parentId":1,"tags":{},"startTime":1778590267494,"traceId":"1737638a0bd95782"},{"name":"generate-routes-manifest","duration":4334,"timestamp":218781669783,"id":12,"parentId":1,"tags":{},"startTime":1778590267494,"traceId":"1737638a0bd95782"},{"name":"run-turbopack","duration":9211007,"timestamp":218781681477,"id":14,"parentId":1,"tags":{},"startTime":1778590267506,"traceId":"1737638a0bd95782"},{"name":"turbopack-build-events","duration":96,"timestamp":218782004219,"id":15,"parentId":1,"tags":{},"startTime":1778590267829,"traceId":"1737638a0bd95782"},{"name":"run-typescript","duration":8729277,"timestamp":218790905415,"id":16,"parentId":1,"tags":{},"startTime":1778590276730,"traceId":"1737638a0bd95782"},{"name":"generate-required-server-files","duration":2710,"timestamp":218799636054,"id":18,"parentId":1,"tags":{},"startTime":1778590285461,"traceId":"1737638a0bd95782"},{"name":"check-static-error-page","duration":23261,"timestamp":218799721642,"id":20,"parentId":19,"tags":{},"startTime":1778590285546,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":337307,"timestamp":218799749211,"id":62,"parentId":22,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":360272,"timestamp":218799726383,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778590285551,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":423690,"timestamp":218799749326,"id":63,"parentId":25,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":443742,"timestamp":218799729379,"id":25,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1778590285554,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":440620,"timestamp":218799749572,"id":65,"parentId":27,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":459830,"timestamp":218799730431,"id":27,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1778590285555,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":449051,"timestamp":218799749511,"id":64,"parentId":26,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":468331,"timestamp":218799730300,"id":26,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1778590285555,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":455209,"timestamp":218799749620,"id":66,"parentId":28,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":472778,"timestamp":218799732119,"id":28,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1778590285557,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":457641,"timestamp":218799749657,"id":67,"parentId":29,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":475031,"timestamp":218799732330,"id":29,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1778590285557,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":462158,"timestamp":218799749743,"id":69,"parentId":32,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":478769,"timestamp":218799733200,"id":32,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1778590285558,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":466605,"timestamp":218799749849,"id":70,"parentId":33,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":483200,"timestamp":218799733310,"id":33,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1778590285558,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":472055,"timestamp":218799749696,"id":68,"parentId":30,"tags":{},"startTime":1778590285574,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":489220,"timestamp":218799732605,"id":30,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1778590285557,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":475565,"timestamp":218799749912,"id":72,"parentId":35,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":492031,"timestamp":218799733497,"id":35,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1778590285558,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":480131,"timestamp":218799749972,"id":73,"parentId":36,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":495561,"timestamp":218799734604,"id":36,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1778590285559,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":481648,"timestamp":218799748801,"id":61,"parentId":21,"tags":{},"startTime":1778590285573,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":505658,"timestamp":218799724831,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778590285550,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":482177,"timestamp":218799749896,"id":71,"parentId":34,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":498720,"timestamp":218799733399,"id":34,"parentId":19,"tags":{"page":"/api/hub/license"},"startTime":1778590285558,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":482521,"timestamp":218799749991,"id":74,"parentId":37,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":497707,"timestamp":218799734855,"id":37,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":487157,"timestamp":218799750020,"id":76,"parentId":39,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":502040,"timestamp":218799735184,"id":39,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":487331,"timestamp":218799750027,"id":77,"parentId":40,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":502069,"timestamp":218799735318,"id":40,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":490667,"timestamp":218799750034,"id":78,"parentId":41,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":505325,"timestamp":218799735436,"id":41,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":490863,"timestamp":218799750040,"id":79,"parentId":42,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":505393,"timestamp":218799735531,"id":42,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":493643,"timestamp":218799750046,"id":80,"parentId":43,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":508106,"timestamp":218799735628,"id":43,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":494989,"timestamp":218799750052,"id":81,"parentId":44,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":509379,"timestamp":218799735715,"id":44,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":497567,"timestamp":218799750057,"id":82,"parentId":45,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":511866,"timestamp":218799735797,"id":45,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":498388,"timestamp":218799750062,"id":83,"parentId":46,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":512458,"timestamp":218799736028,"id":46,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1778590285561,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":501190,"timestamp":218799750074,"id":85,"parentId":48,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":514999,"timestamp":218799736302,"id":48,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778590285561,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":501330,"timestamp":218799750068,"id":84,"parentId":47,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":515250,"timestamp":218799736171,"id":47,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1778590285561,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":498520,"timestamp":218799756221,"id":87,"parentId":31,"tags":{},"startTime":1778590285581,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":521937,"timestamp":218799732844,"id":31,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1778590285558,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":502208,"timestamp":218799753400,"id":86,"parentId":24,"tags":{},"startTime":1778590285578,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":528751,"timestamp":218799726937,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1778590285552,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":529595,"timestamp":218799749999,"id":75,"parentId":38,"tags":{},"startTime":1778590285575,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":544610,"timestamp":218799735046,"id":38,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1778590285560,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":530506,"timestamp":218799760145,"id":90,"parentId":50,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":553743,"timestamp":218799736965,"id":50,"parentId":19,"tags":{"page":"/logs"},"startTime":1778590285562,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":536475,"timestamp":218799760151,"id":91,"parentId":51,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":559516,"timestamp":218799737188,"id":51,"parentId":19,"tags":{"page":"/messages"},"startTime":1778590285562,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":543157,"timestamp":218799760157,"id":92,"parentId":52,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":565975,"timestamp":218799737405,"id":52,"parentId":19,"tags":{"page":"/node"},"startTime":1778590285562,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":547987,"timestamp":218799760163,"id":93,"parentId":53,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":570578,"timestamp":218799737642,"id":53,"parentId":19,"tags":{"page":"/nodes"},"startTime":1778590285562,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":554459,"timestamp":218799760169,"id":94,"parentId":55,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":576195,"timestamp":218799738494,"id":55,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1778590285563,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":556178,"timestamp":218799760108,"id":88,"parentId":23,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":589641,"timestamp":218799726717,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1778590285551,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":560288,"timestamp":218799760138,"id":89,"parentId":49,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":583751,"timestamp":218799736733,"id":49,"parentId":19,"tags":{"page":"/login"},"startTime":1778590285561,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":560469,"timestamp":218799760175,"id":95,"parentId":56,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":581051,"timestamp":218799739618,"id":56,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1778590285564,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":562979,"timestamp":218799760180,"id":96,"parentId":58,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":579751,"timestamp":218799743451,"id":58,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1778590285568,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":566068,"timestamp":218799760194,"id":98,"parentId":60,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":581639,"timestamp":218799744668,"id":60,"parentId":19,"tags":{"page":"/tasks"},"startTime":1778590285569,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":556723,"timestamp":218799775945,"id":99,"parentId":57,"tags":{},"startTime":1778590285601,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":589882,"timestamp":218799742845,"id":57,"parentId":19,"tags":{"page":"/settings"},"startTime":1778590285568,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":545515,"timestamp":218799787519,"id":100,"parentId":54,"tags":{},"startTime":1778590285612,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":595167,"timestamp":218799737909,"id":54,"parentId":19,"tags":{"page":"/"},"startTime":1778590285563,"traceId":"1737638a0bd95782"},{"name":"is-page-static","duration":576136,"timestamp":218799760185,"id":97,"parentId":59,"tags":{},"startTime":1778590285585,"traceId":"1737638a0bd95782"},{"name":"check-page","duration":591931,"timestamp":218799744451,"id":59,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1778590285569,"traceId":"1737638a0bd95782"},{"name":"static-check","duration":615670,"timestamp":218799720746,"id":19,"parentId":1,"tags":{},"startTime":1778590285545,"traceId":"1737638a0bd95782"},{"name":"write-routes-manifest","duration":446,"timestamp":218800342709,"id":102,"parentId":1,"tags":{},"startTime":1778590286167,"traceId":"1737638a0bd95782"},{"name":"load-dotenv","duration":52,"timestamp":218800355673,"id":105,"parentId":104,"tags":{},"startTime":1778590286180,"traceId":"1737638a0bd95782"},{"name":"run-export-path-map","duration":742,"timestamp":218800359151,"id":106,"parentId":104,"tags":{},"startTime":1778590286184,"traceId":"1737638a0bd95782"},{"name":"next-export","duration":656487,"timestamp":218800354411,"id":104,"parentId":1,"tags":{},"startTime":1778590286179,"traceId":"1737638a0bd95782"},{"name":"move-exported-app-not-found-","duration":669,"timestamp":218801017900,"id":107,"parentId":103,"tags":{},"startTime":1778590286843,"traceId":"1737638a0bd95782"},{"name":"move-exported-app-global-error-","duration":426,"timestamp":218801018702,"id":108,"parentId":103,"tags":{},"startTime":1778590286843,"traceId":"1737638a0bd95782"}]
|
|
2
|
+
[{"name":"static-generation","duration":676446,"timestamp":218800347322,"id":103,"parentId":1,"tags":{},"startTime":1778590286172,"traceId":"1737638a0bd95782"},{"name":"write-routes-manifest","duration":549,"timestamp":218801023981,"id":109,"parentId":1,"tags":{},"startTime":1778590286849,"traceId":"1737638a0bd95782"},{"name":"print-tree-view","duration":3970,"timestamp":218801040088,"id":110,"parentId":1,"tags":{},"startTime":1778590286865,"traceId":"1737638a0bd95782"},{"name":"write-route-bundle-stats","duration":15101,"timestamp":218801044098,"id":111,"parentId":1,"tags":{},"startTime":1778590286869,"traceId":"1737638a0bd95782"},{"name":"telemetry-flush","duration":18811,"timestamp":218801059235,"id":112,"parentId":1,"tags":{},"startTime":1778590286884,"traceId":"1737638a0bd95782"},{"name":"next-build","duration":19602922,"timestamp":218781475176,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778590267300,"traceId":"1737638a0bd95782"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":9211007,"timestamp":218781681477,"id":14,"parentId":1,"tags":{},"startTime":1778590267506,"traceId":"1737638a0bd95782"},{"name":"turbopack-build-events","duration":96,"timestamp":218782004219,"id":15,"parentId":1,"tags":{},"startTime":1778590267829,"traceId":"1737638a0bd95782"},{"name":"run-typescript","duration":8729277,"timestamp":218790905415,"id":16,"parentId":1,"tags":{},"startTime":1778590276730,"traceId":"1737638a0bd95782"},{"name":"static-check","duration":615670,"timestamp":218799720746,"id":19,"parentId":1,"tags":{},"startTime":1778590285545,"traceId":"1737638a0bd95782"},{"name":"static-generation","duration":676446,"timestamp":218800347322,"id":103,"parentId":1,"tags":{},"startTime":1778590286172,"traceId":"1737638a0bd95782"},{"name":"telemetry-flush","duration":18811,"timestamp":218801059235,"id":112,"parentId":1,"tags":{},"startTime":1778590286884,"traceId":"1737638a0bd95782"},{"name":"next-build","duration":19602922,"timestamp":218781475176,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778590267300,"traceId":"1737638a0bd95782"}]
|
|
@@ -10,9 +10,10 @@ interface StatsBarProps {
|
|
|
10
10
|
|
|
11
11
|
export function StatsBar({ online, working, total, version, uptime }: StatsBarProps) {
|
|
12
12
|
const onlinePercent = total > 0 ? Math.round((online / total) * 100) : 0;
|
|
13
|
+
const fleetEmpty = total === 0;
|
|
13
14
|
|
|
14
15
|
return (
|
|
15
|
-
<div className=
|
|
16
|
+
<div className={fleetEmpty ? 'mb-4' : 'mb-8'}>
|
|
16
17
|
{/* Title row */}
|
|
17
18
|
<div className="flex flex-wrap items-center gap-3 mb-4">
|
|
18
19
|
<h1 className="text-2xl font-bold text-white tracking-tight">Agent Network</h1>
|
|
@@ -21,41 +22,63 @@ export function StatsBar({ online, working, total, version, uptime }: StatsBarPr
|
|
|
21
22
|
</span>
|
|
22
23
|
</div>
|
|
23
24
|
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
25
|
+
{fleetEmpty ? (
|
|
26
|
+
/* Round 72: thin status strip replaces the 4-card grid when fleet
|
|
27
|
+
is empty. Saves ~280px on mobile (CTA y=650 → ~370) and keeps
|
|
28
|
+
the same data visible in a single inline row. */
|
|
29
|
+
<div className="anet-stat-strip flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-gray-500 border-t border-b border-[#2a2a4a] py-2">
|
|
30
|
+
<span className="inline-flex items-center gap-1.5">
|
|
31
|
+
<span aria-hidden className="inline-block w-1.5 h-1.5 rounded-full bg-gray-600" />
|
|
32
|
+
<span className="text-gray-300 tabular-nums">0</span> online
|
|
33
|
+
</span>
|
|
34
|
+
<span className="text-gray-700">·</span>
|
|
35
|
+
<span className="inline-flex items-center gap-1.5">
|
|
36
|
+
<span aria-hidden className="inline-block w-1.5 h-1.5 rounded-full bg-gray-600" />
|
|
37
|
+
<span className="text-gray-300 tabular-nums">0</span> working
|
|
38
|
+
</span>
|
|
39
|
+
<span className="text-gray-700">·</span>
|
|
40
|
+
<span className="inline-flex items-center gap-1.5">
|
|
41
|
+
<span aria-hidden className="inline-block w-1.5 h-1.5 rounded-full bg-gray-600" />
|
|
42
|
+
<span className="text-gray-300 tabular-nums">0</span> registered
|
|
43
|
+
</span>
|
|
44
|
+
</div>
|
|
45
|
+
) : (
|
|
46
|
+
/* Populated state — full 4-card grid as before */
|
|
47
|
+
<div className="grid grid-cols-2 sm:grid-cols-4 gap-3">
|
|
48
|
+
<StatCard
|
|
49
|
+
value={online}
|
|
50
|
+
label="Online"
|
|
51
|
+
sub={`${onlinePercent}% of fleet`}
|
|
52
|
+
color="text-green-400"
|
|
53
|
+
accent="from-green-500/20 to-green-500/0"
|
|
54
|
+
border="border-green-500/15"
|
|
55
|
+
/>
|
|
56
|
+
<StatCard
|
|
57
|
+
value={working}
|
|
58
|
+
label="Working"
|
|
59
|
+
sub={online > 0 ? `${Math.round((working / online) * 100)}% utilization` : '--'}
|
|
60
|
+
color="text-cyan-400"
|
|
61
|
+
accent="from-cyan-500/20 to-cyan-500/0"
|
|
62
|
+
border="border-cyan-500/15"
|
|
63
|
+
/>
|
|
64
|
+
<StatCard
|
|
65
|
+
value={total - online}
|
|
66
|
+
label="Offline"
|
|
67
|
+
sub={total - online === 0 ? 'All systems go' : `${total - online} disconnected`}
|
|
68
|
+
color="text-gray-400"
|
|
69
|
+
accent="from-gray-500/10 to-gray-500/0"
|
|
70
|
+
border="border-gray-500/15"
|
|
71
|
+
/>
|
|
72
|
+
<StatCard
|
|
73
|
+
value={total}
|
|
74
|
+
label="Total"
|
|
75
|
+
sub="Registered nodes"
|
|
76
|
+
color="text-white"
|
|
77
|
+
accent="from-blue-500/15 to-blue-500/0"
|
|
78
|
+
border="border-blue-500/15"
|
|
79
|
+
/>
|
|
80
|
+
</div>
|
|
81
|
+
)}
|
|
59
82
|
</div>
|
|
60
83
|
);
|
|
61
84
|
}
|
package/package.json
CHANGED
package/scripts/loop-review.mjs
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
/* Loop self-review — captures Overview in cyber+light × desktop+mobile,
|
|
2
2
|
* runs a few observable checks, prints a per-axis score. Not a regression
|
|
3
|
-
* test — the cron's "review and score then propose next round" output.
|
|
3
|
+
* test — the cron's "review and score then propose next round" output.
|
|
4
|
+
*
|
|
5
|
+
* Round 71: replaced the toy checks (overflow, sidebar visible, blur count)
|
|
6
|
+
* with checks that actually catch the bugs we keep shipping:
|
|
7
|
+
* - CTA-above-fold: does the primary "Spin up" / "Get started" / etc
|
|
8
|
+
* button live within the first viewport? (deduct 3)
|
|
9
|
+
* - Zero-card density: how many "0" stat cards are crammed in above the
|
|
10
|
+
* CTA? (deduct 1 per zero-card beyond the first 2)
|
|
11
|
+
* - Whitespace gap: any element-to-element vertical gap >200px in the
|
|
12
|
+
* top half? (deduct 1)
|
|
13
|
+
* - Misleading-copy: "All systems go" text rendered when nodes.total=0
|
|
14
|
+
* (deduct 2) — round-70-class bug guard
|
|
15
|
+
* - Old: theme, horizontal overflow, sidebar, glow tell — still in
|
|
16
|
+
*
|
|
17
|
+
* Score is 10 max; deductions accumulate. The pre-r70 design that scored
|
|
18
|
+
* 10/10 here should now score ~4–5.
|
|
19
|
+
*/
|
|
4
20
|
|
|
5
21
|
import { chromium } from 'playwright';
|
|
6
22
|
import { mkdirSync } from 'node:fs';
|
|
@@ -47,16 +63,14 @@ for (const m of matrix) {
|
|
|
47
63
|
|
|
48
64
|
const page = await ctx.newPage();
|
|
49
65
|
await page.goto(`${BASE}/`, { waitUntil: 'domcontentloaded', timeout: 15000 });
|
|
50
|
-
await page.waitForTimeout(1200);
|
|
66
|
+
await page.waitForTimeout(1200);
|
|
51
67
|
|
|
52
|
-
// Forced theme apply after hydration — same trick the screenshot suite uses
|
|
53
68
|
await page.evaluate((t) => document.documentElement.setAttribute('data-theme', t), m.theme);
|
|
54
69
|
await page.waitForTimeout(300);
|
|
55
70
|
|
|
56
71
|
const file = path.join(OUT, `overview-${m.theme}-${m.tag}.png`);
|
|
57
72
|
await page.screenshot({ path: file, fullPage: true });
|
|
58
73
|
|
|
59
|
-
// Observable checks
|
|
60
74
|
const checks = await page.evaluate(() => {
|
|
61
75
|
const doc = document.documentElement;
|
|
62
76
|
const theme = doc.getAttribute('data-theme');
|
|
@@ -64,56 +78,121 @@ for (const m of matrix) {
|
|
|
64
78
|
const bodyBg = getComputedStyle(body).backgroundColor;
|
|
65
79
|
const bodyFg = getComputedStyle(body).color;
|
|
66
80
|
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
const viewportH = window.innerHeight;
|
|
82
|
+
const viewportW = window.innerWidth;
|
|
83
|
+
|
|
84
|
+
// --- CTA-above-fold ---
|
|
85
|
+
// We treat any of these texts as the page's primary CTA:
|
|
86
|
+
// "Spin up your first agent" — empty Overview onboarding
|
|
87
|
+
// "Get started" — generic
|
|
88
|
+
// "Dispatch" (when not empty) — populated state primary action
|
|
89
|
+
const ctaTextRe = /Spin up your first agent|Get started/i;
|
|
90
|
+
const ctaCandidates = [...document.querySelectorAll('h1, h2, h3, p, div, button, a')]
|
|
91
|
+
.filter(el => ctaTextRe.test(el.textContent || ''));
|
|
92
|
+
let ctaTop = null;
|
|
93
|
+
if (ctaCandidates.length) {
|
|
94
|
+
// Pick the smallest (innermost) element matching to avoid catching a wrapping section
|
|
95
|
+
const sorted = ctaCandidates.sort((a, b) => (a.textContent?.length || 0) - (b.textContent?.length || 0));
|
|
96
|
+
const r = sorted[0].getBoundingClientRect();
|
|
97
|
+
ctaTop = r.top;
|
|
98
|
+
}
|
|
73
99
|
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
100
|
+
// --- Zero-card density ---
|
|
101
|
+
// Count visible elements whose trimmed text === "0". These are usually
|
|
102
|
+
// big stat-card values dominating prime real estate.
|
|
103
|
+
const zeroCards = [...document.querySelectorAll('div, span')]
|
|
104
|
+
.filter(el => {
|
|
105
|
+
const t = el.textContent?.trim();
|
|
106
|
+
if (t !== '0' && t !== '0/0') return false;
|
|
107
|
+
const r = el.getBoundingClientRect();
|
|
108
|
+
return r.top >= 0 && r.top < viewportH && r.width > 20 && r.height > 20;
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// --- Whitespace gap ---
|
|
112
|
+
// Look for sibling-to-sibling top gaps >200px in the page content
|
|
113
|
+
// container. AppShell wraps page children in
|
|
114
|
+
// <main><HealthBanner/><div><div class="min-h-screen ...">{page}</div></div></main>,
|
|
115
|
+
// so we walk into that inner page wrapper to read real section gaps.
|
|
116
|
+
const main = document.querySelector('main');
|
|
117
|
+
const inner = main?.querySelector(':scope > div:last-of-type > div') || main || document.body;
|
|
118
|
+
const directKids = [...inner.children].filter(el => {
|
|
119
|
+
const r = el.getBoundingClientRect();
|
|
120
|
+
return r.height > 0 && r.width > 0;
|
|
121
|
+
});
|
|
122
|
+
let maxGap = 0;
|
|
123
|
+
for (let i = 0; i + 1 < directKids.length; i++) {
|
|
124
|
+
const a = directKids[i].getBoundingClientRect();
|
|
125
|
+
const b = directKids[i + 1].getBoundingClientRect();
|
|
126
|
+
if (a.bottom < 1600 && b.top - a.bottom > maxGap) {
|
|
127
|
+
maxGap = Math.round(b.top - a.bottom);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
80
130
|
|
|
81
|
-
//
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
131
|
+
// --- Misleading copy guard ---
|
|
132
|
+
// "All systems go" must not appear anywhere when nodes.total === 0.
|
|
133
|
+
// We can't read state directly, but if the page also shows
|
|
134
|
+
// "Waiting for first agent" then we know fleet is empty.
|
|
135
|
+
const bodyText = document.body.innerText;
|
|
136
|
+
const fleetEmpty = /Waiting for first agent/i.test(bodyText);
|
|
137
|
+
const sayingAllSystemsGo = /All systems go/i.test(bodyText);
|
|
138
|
+
const misleadingCopy = fleetEmpty && sayingAllSystemsGo;
|
|
85
139
|
|
|
86
|
-
//
|
|
87
|
-
const
|
|
140
|
+
// --- Carryover ---
|
|
141
|
+
const docWidth = doc.scrollWidth;
|
|
142
|
+
const horizontalOverflow = docWidth > viewportW + 2;
|
|
88
143
|
let glowyCount = 0;
|
|
89
|
-
for (const el of
|
|
144
|
+
for (const el of document.querySelectorAll('body *')) {
|
|
90
145
|
const cs = getComputedStyle(el);
|
|
91
146
|
if (cs.filter && cs.filter.includes('blur(') && !cs.filter.includes('blur(0px)')) glowyCount++;
|
|
92
147
|
}
|
|
148
|
+
const sidebar = document.querySelector('aside, [data-sidebar], nav');
|
|
149
|
+
const sidebarRect = sidebar?.getBoundingClientRect();
|
|
150
|
+
const sidebarVisible = !!(sidebarRect && sidebarRect.width > 0 && sidebarRect.height > 0);
|
|
93
151
|
|
|
94
152
|
return {
|
|
95
|
-
theme,
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
glowyCount,
|
|
153
|
+
theme, bodyBg, bodyFg,
|
|
154
|
+
viewportH, viewportW,
|
|
155
|
+
ctaTop, ctaPresent: ctaCandidates.length > 0,
|
|
156
|
+
zeroCardCount: zeroCards.length,
|
|
157
|
+
maxGap,
|
|
158
|
+
fleetEmpty, sayingAllSystemsGo, misleadingCopy,
|
|
159
|
+
docWidth, horizontalOverflow,
|
|
160
|
+
glowyCount, sidebarVisible,
|
|
104
161
|
};
|
|
105
162
|
});
|
|
106
163
|
|
|
107
|
-
// Score: 10 max, deduct for failures
|
|
108
164
|
let score = 10;
|
|
109
165
|
const notes = [];
|
|
110
|
-
if (checks.theme !== m.theme) { score -= 3; notes.push(`theme=${checks.theme}
|
|
111
|
-
if (checks.horizontalOverflow) { score -= 2; notes.push(`
|
|
166
|
+
if (checks.theme !== m.theme) { score -= 3; notes.push(`theme=${checks.theme}`); }
|
|
167
|
+
if (checks.horizontalOverflow) { score -= 2; notes.push(`horiz overflow ${checks.docWidth}/${checks.viewportW}`); }
|
|
112
168
|
if (m.tag === 'desktop' && !checks.sidebarVisible) { score -= 1; notes.push('sidebar missing on desktop'); }
|
|
113
|
-
if (checks.glowyCount > 8) { score -= 1; notes.push(`${checks.glowyCount}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
169
|
+
if (checks.glowyCount > 8) { score -= 1; notes.push(`${checks.glowyCount} blur-filter elements (glow tell)`); }
|
|
170
|
+
|
|
171
|
+
// New checks — the ones that would have caught r70's bug
|
|
172
|
+
if (checks.ctaPresent && checks.ctaTop !== null) {
|
|
173
|
+
if (checks.ctaTop > checks.viewportH) {
|
|
174
|
+
score -= 3;
|
|
175
|
+
notes.push(`CTA below fold (top=${Math.round(checks.ctaTop)} > vh=${checks.viewportH})`);
|
|
176
|
+
} else if (checks.ctaTop > checks.viewportH * 0.7) {
|
|
177
|
+
score -= 1;
|
|
178
|
+
notes.push(`CTA low in fold (top=${Math.round(checks.ctaTop)})`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (checks.zeroCardCount > 4) {
|
|
182
|
+
const extra = Math.min(checks.zeroCardCount - 4, 3);
|
|
183
|
+
score -= extra;
|
|
184
|
+
notes.push(`${checks.zeroCardCount} zero-value cards above fold`);
|
|
185
|
+
}
|
|
186
|
+
if (checks.maxGap > 200) {
|
|
187
|
+
score -= 1;
|
|
188
|
+
notes.push(`whitespace gap ${checks.maxGap}px`);
|
|
189
|
+
}
|
|
190
|
+
if (checks.misleadingCopy) {
|
|
191
|
+
score -= 2;
|
|
192
|
+
notes.push(`'All systems go' shown while fleet empty`);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
report.push({ ...m, file, checks, score: Math.max(score, 0), notes });
|
|
117
196
|
|
|
118
197
|
await page.close();
|
|
119
198
|
await ctx.close();
|
|
@@ -121,11 +200,10 @@ for (const m of matrix) {
|
|
|
121
200
|
|
|
122
201
|
await browser.close();
|
|
123
202
|
|
|
124
|
-
|
|
125
|
-
console.log('\n=== Loop self-review ===\n');
|
|
203
|
+
console.log('\n=== Loop self-review (harness r71) ===\n');
|
|
126
204
|
for (const r of report) {
|
|
127
205
|
console.log(`${r.theme}/${r.tag} score=${r.score}/10`);
|
|
128
|
-
console.log(`
|
|
206
|
+
console.log(` cta_top=${r.checks.ctaTop !== null ? Math.round(r.checks.ctaTop) : '--'} zero_cards=${r.checks.zeroCardCount} max_gap=${r.checks.maxGap}px fleet_empty=${r.checks.fleetEmpty}`);
|
|
129
207
|
if (r.notes.length) console.log(` notes: ${r.notes.join(' · ')}`);
|
|
130
208
|
console.log(` ${path.relative(process.cwd(), r.file)}`);
|
|
131
209
|
}
|