@sleep2agi/agent-network-dashboard 0.6.3-preview.13 → 0.6.3-preview.14
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 +10 -10
- 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 +3 -3
- package/.next/server/app/node.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- 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 +3 -3
- package/.next/server/app/nodes.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- 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/providers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/providers.html +2 -2
- package/.next/server/app/providers.rsc +2 -2
- package/.next/server/app/providers.segments/_full.segment.rsc +2 -2
- package/.next/server/app/providers.segments/_head.segment.rsc +1 -1
- package/.next/server/app/providers.segments/_index.segment.rsc +2 -2
- package/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/providers.segments/providers/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/providers.segments/providers.segment.rsc +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/servers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/servers.html +2 -2
- package/.next/server/app/servers.rsc +2 -2
- package/.next/server/app/servers.segments/_full.segment.rsc +2 -2
- package/.next/server/app/servers.segments/_head.segment.rsc +1 -1
- package/.next/server/app/servers.segments/_index.segment.rsc +2 -2
- package/.next/server/app/servers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/servers.segments/servers/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/servers.segments/servers.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/[root-of-the-server]__091su60._.js +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__091su60._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0vc.3k7._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0vc.3k7._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_0rh8p9o._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_0rh8p9o._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0~.1~ew._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_0~.1~ew._.js.map +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_13k3-ai._.js +1 -1
- package/.next/server/chunks/ssr/dash-loop-wt_app_13k3-ai._.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/{03f7qjy0ruw9t.js → 00_m_epf7h806.js} +1 -1
- package/.next/static/chunks/{0lxlyi7jro74u.js → 0_4kwsiltvp~l.js} +1 -1
- package/.next/static/chunks/{0_51bg9gfw9i..js → 0wd05udmyiwvk.js} +2 -2
- package/.next/static/chunks/{0z-4v9hqzypm-.js → 146p-0l764ojl.js} +1 -1
- package/.next/static/chunks/{0-7o8cy_tbz2u.js → 1566p5peao240.js} +1 -1
- package/.next/static/chunks/180t32do_.c~c.css +1 -0
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/components/AgentCard.tsx +19 -2
- package/app/components/CommandCenter.tsx +5 -3
- package/app/components/TaskChatPanel.tsx +115 -22
- package/package.json +1 -1
- package/.next/static/chunks/0lgvx1l4roc~..css +0 -1
- /package/.next/static/{0BXnhObFcvXecoQLBxzRv → qpprKezd_zujs8ouGr3LY}/_buildManifest.js +0 -0
- /package/.next/static/{0BXnhObFcvXecoQLBxzRv → qpprKezd_zujs8ouGr3LY}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{0BXnhObFcvXecoQLBxzRv → qpprKezd_zujs8ouGr3LY}/_ssgManifest.js +0 -0
package/.next/trace
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":450,"timestamp":5778214681201,"id":4,"parentId":1,"tags":{},"startTime":1784586186927,"traceId":"27a56f9227385779"},{"name":"load-custom-routes","duration":762,"timestamp":5778214681883,"id":5,"parentId":1,"tags":{},"startTime":1784586186928,"traceId":"27a56f9227385779"},{"name":"create-dist-dir","duration":1161,"timestamp":5778214682717,"id":6,"parentId":1,"tags":{},"startTime":1784586186929,"traceId":"27a56f9227385779"},{"name":"clean","duration":51011,"timestamp":5778214684865,"id":7,"parentId":1,"tags":{},"startTime":1784586186931,"traceId":"27a56f9227385779"},{"name":"discover-routes","duration":28942,"timestamp":5778214830738,"id":8,"parentId":1,"tags":{},"startTime":1784586187077,"traceId":"27a56f9227385779"},{"name":"create-root-mapping","duration":194,"timestamp":5778214859766,"id":9,"parentId":1,"tags":{},"startTime":1784586187106,"traceId":"27a56f9227385779"},{"name":"generate-route-types","duration":22378,"timestamp":5778214863160,"id":10,"parentId":1,"tags":{},"startTime":1784586187109,"traceId":"27a56f9227385779"},{"name":"public-dir-conflict-check","duration":106,"timestamp":5778214885722,"id":11,"parentId":1,"tags":{},"startTime":1784586187132,"traceId":"27a56f9227385779"},{"name":"generate-routes-manifest","duration":5674,"timestamp":5778214885954,"id":12,"parentId":1,"tags":{},"startTime":1784586187132,"traceId":"27a56f9227385779"},{"name":"run-turbopack","duration":9176141,"timestamp":5778214903948,"id":14,"parentId":1,"tags":{},"startTime":1784586187150,"traceId":"27a56f9227385779"},{"name":"turbopack-build-events","duration":80,"timestamp":5778215273116,"id":15,"parentId":1,"tags":{},"startTime":1784586187519,"traceId":"27a56f9227385779"},{"name":"run-typescript","duration":13770874,"timestamp":5778224129919,"id":16,"parentId":1,"tags":{},"startTime":1784586196376,"traceId":"27a56f9227385779"},{"name":"generate-required-server-files","duration":7393,"timestamp":5778237906254,"id":18,"parentId":1,"tags":{},"startTime":1784586210153,"traceId":"27a56f9227385779"},{"name":"check-static-error-page","duration":25468,"timestamp":5778238172391,"id":20,"parentId":19,"tags":{},"startTime":1784586210419,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":664460,"timestamp":5778238201427,"id":77,"parentId":30,"tags":{},"startTime":1784586210448,"traceId":"27a56f9227385779"},{"name":"check-page","duration":682305,"timestamp":5778238183788,"id":30,"parentId":19,"tags":{"page":"/api/anet/providers/probe"},"startTime":1784586210430,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":670087,"timestamp":5778238202086,"id":81,"parentId":35,"tags":{},"startTime":1784586210448,"traceId":"27a56f9227385779"},{"name":"check-page","duration":687340,"timestamp":5778238184906,"id":35,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1784586210431,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":706299,"timestamp":5778238201183,"id":75,"parentId":22,"tags":{},"startTime":1784586210447,"traceId":"27a56f9227385779"},{"name":"check-page","duration":732004,"timestamp":5778238175582,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1784586210422,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":718471,"timestamp":5778238200741,"id":74,"parentId":21,"tags":{},"startTime":1784586210447,"traceId":"27a56f9227385779"},{"name":"check-page","duration":745176,"timestamp":5778238174119,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1784586210420,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":819427,"timestamp":5778238202279,"id":82,"parentId":36,"tags":{},"startTime":1784586210449,"traceId":"27a56f9227385779"},{"name":"check-page","duration":836279,"timestamp":5778238185511,"id":36,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1784586210432,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":831535,"timestamp":5778238201773,"id":79,"parentId":33,"tags":{},"startTime":1784586210448,"traceId":"27a56f9227385779"},{"name":"check-page","duration":848767,"timestamp":5778238184623,"id":33,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1784586210431,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":831325,"timestamp":5778238202413,"id":84,"parentId":39,"tags":{},"startTime":1784586210449,"traceId":"27a56f9227385779"},{"name":"check-page","duration":846863,"timestamp":5778238186918,"id":39,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1784586210433,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":849695,"timestamp":5778238203808,"id":87,"parentId":42,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":866226,"timestamp":5778238187356,"id":42,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":855523,"timestamp":5778238203828,"id":88,"parentId":43,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":872020,"timestamp":5778238187421,"id":43,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":861089,"timestamp":5778238203842,"id":89,"parentId":44,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":878644,"timestamp":5778238187496,"id":44,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":865034,"timestamp":5778238201528,"id":78,"parentId":32,"tags":{},"startTime":1784586210448,"traceId":"27a56f9227385779"},{"name":"check-page","duration":882150,"timestamp":5778238184455,"id":32,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1784586210431,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":866785,"timestamp":5778238202444,"id":85,"parentId":40,"tags":{},"startTime":1784586210449,"traceId":"27a56f9227385779"},{"name":"check-page","duration":882161,"timestamp":5778238187119,"id":40,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1784586210433,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":874630,"timestamp":5778238203851,"id":90,"parentId":45,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":890948,"timestamp":5778238187599,"id":45,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":880954,"timestamp":5778238203888,"id":93,"parentId":50,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":895990,"timestamp":5778238188908,"id":50,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1784586210435,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":885496,"timestamp":5778238203901,"id":94,"parentId":51,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":900326,"timestamp":5778238189130,"id":51,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1784586210435,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":894493,"timestamp":5778238203913,"id":95,"parentId":52,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":909215,"timestamp":5778238189260,"id":52,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1784586210436,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":894927,"timestamp":5778238203731,"id":86,"parentId":41,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":911454,"timestamp":5778238187256,"id":41,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":897559,"timestamp":5778238203879,"id":92,"parentId":48,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":913473,"timestamp":5778238188028,"id":48,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":899858,"timestamp":5778238203926,"id":96,"parentId":53,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":914452,"timestamp":5778238189375,"id":53,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1784586210436,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":904942,"timestamp":5778238201922,"id":80,"parentId":34,"tags":{},"startTime":1784586210448,"traceId":"27a56f9227385779"},{"name":"check-page","duration":922151,"timestamp":5778238184759,"id":34,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1784586210431,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":903873,"timestamp":5778238203936,"id":97,"parentId":54,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":918342,"timestamp":5778238189511,"id":54,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1784586210436,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":904483,"timestamp":5778238203962,"id":99,"parentId":56,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":918715,"timestamp":5778238189769,"id":56,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1784586210436,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":909526,"timestamp":5778238203950,"id":98,"parentId":55,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":923874,"timestamp":5778238189658,"id":55,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1784586210436,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":926665,"timestamp":5778238204029,"id":102,"parentId":61,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":939964,"timestamp":5778238190806,"id":61,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1784586210437,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":924156,"timestamp":5778238212133,"id":104,"parentId":25,"tags":{},"startTime":1784586210458,"traceId":"27a56f9227385779"},{"name":"check-page","duration":956071,"timestamp":5778238180301,"id":25,"parentId":19,"tags":{"page":"/api/anet/host-supervisors"},"startTime":1784586210427,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":926542,"timestamp":5778238214671,"id":105,"parentId":26,"tags":{},"startTime":1784586210461,"traceId":"27a56f9227385779"},{"name":"check-page","duration":959713,"timestamp":5778238181572,"id":26,"parentId":19,"tags":{"page":"/api/anet/node-config"},"startTime":1784586210428,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":948963,"timestamp":5778238203984,"id":101,"parentId":58,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":963054,"timestamp":5778238189998,"id":58,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1784586210436,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":949355,"timestamp":5778238203865,"id":91,"parentId":46,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":965538,"timestamp":5778238187720,"id":46,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":935971,"timestamp":5778238217390,"id":106,"parentId":27,"tags":{},"startTime":1784586210464,"traceId":"27a56f9227385779"},{"name":"check-page","duration":971333,"timestamp":5778238182123,"id":27,"parentId":19,"tags":{"page":"/api/anet/node-create"},"startTime":1784586210428,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":954579,"timestamp":5778238202342,"id":83,"parentId":37,"tags":{},"startTime":1784586210449,"traceId":"27a56f9227385779"},{"name":"check-page","duration":971248,"timestamp":5778238185745,"id":37,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1784586210432,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":938881,"timestamp":5778238220032,"id":107,"parentId":28,"tags":{},"startTime":1784586210466,"traceId":"27a56f9227385779"},{"name":"check-page","duration":975831,"timestamp":5778238183129,"id":28,"parentId":19,"tags":{"page":"/api/anet/node-lifecycle"},"startTime":1784586210429,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":960831,"timestamp":5778238210733,"id":103,"parentId":24,"tags":{},"startTime":1784586210457,"traceId":"27a56f9227385779"},{"name":"check-page","duration":995208,"timestamp":5778238176418,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1784586210423,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":945787,"timestamp":5778238225994,"id":109,"parentId":38,"tags":{},"startTime":1784586210472,"traceId":"27a56f9227385779"},{"name":"check-page","duration":985954,"timestamp":5778238185877,"id":38,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1784586210432,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":942985,"timestamp":5778238228968,"id":111,"parentId":49,"tags":{},"startTime":1784586210475,"traceId":"27a56f9227385779"},{"name":"check-page","duration":983812,"timestamp":5778238188169,"id":49,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":947514,"timestamp":5778238224618,"id":108,"parentId":31,"tags":{},"startTime":1784586210471,"traceId":"27a56f9227385779"},{"name":"check-page","duration":988172,"timestamp":5778238183984,"id":31,"parentId":19,"tags":{"page":"/api/anet/providers"},"startTime":1784586210430,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":948839,"timestamp":5778238226904,"id":110,"parentId":47,"tags":{},"startTime":1784586210473,"traceId":"27a56f9227385779"},{"name":"check-page","duration":988008,"timestamp":5778238187796,"id":47,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1784586210434,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":990300,"timestamp":5778238203972,"id":100,"parentId":57,"tags":{},"startTime":1784586210450,"traceId":"27a56f9227385779"},{"name":"check-page","duration":1004469,"timestamp":5778238189882,"id":57,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1784586210436,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":951572,"timestamp":5778238242957,"id":113,"parentId":59,"tags":{},"startTime":1784586210489,"traceId":"27a56f9227385779"},{"name":"check-page","duration":1004127,"timestamp":5778238190432,"id":59,"parentId":19,"tags":{"page":"/login"},"startTime":1784586210437,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":968712,"timestamp":5778238243044,"id":118,"parentId":66,"tags":{},"startTime":1784586210489,"traceId":"27a56f9227385779"},{"name":"check-page","duration":1019572,"timestamp":5778238192257,"id":66,"parentId":19,"tags":{"page":"/providers"},"startTime":1784586210439,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":986287,"timestamp":5778238243059,"id":119,"parentId":67,"tags":{},"startTime":1784586210489,"traceId":"27a56f9227385779"},{"name":"check-page","duration":1036913,"timestamp":5778238192508,"id":67,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1784586210439,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":999916,"timestamp":5778238243072,"id":120,"parentId":68,"tags":{},"startTime":1784586210489,"traceId":"27a56f9227385779"},{"name":"check-page","duration":1048860,"timestamp":5778238194228,"id":68,"parentId":19,"tags":{"page":"/servers"},"startTime":1784586210441,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":1000442,"timestamp":5778238242982,"id":115,"parentId":62,"tags":{},"startTime":1784586210489,"traceId":"27a56f9227385779"},{"name":"check-page","duration":1052480,"timestamp":5778238190991,"id":62,"parentId":19,"tags":{"page":"/messages"},"startTime":1784586210437,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":1009084,"timestamp":5778238243094,"id":122,"parentId":71,"tags":{},"startTime":1784586210489,"traceId":"27a56f9227385779"},{"name":"check-page","duration":1056971,"timestamp":5778238195261,"id":71,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1784586210442,"traceId":"27a56f9227385779"},{"name":"is-page-static","duration":1016887,"timestamp":5778238242906,"id":112,"parentId":23,"tags":{},"startTime":1784586210489,"traceId":"27a56f9227385779"}]
|
|
2
|
-
[{"name":"check-page","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":296,"timestamp":5779869276575,"id":4,"parentId":1,"tags":{},"startTime":1784587841523,"traceId":"275fb4c4ea495391"},{"name":"load-custom-routes","duration":525,"timestamp":5779869277066,"id":5,"parentId":1,"tags":{},"startTime":1784587841523,"traceId":"275fb4c4ea495391"},{"name":"create-dist-dir","duration":787,"timestamp":5779869277642,"id":6,"parentId":1,"tags":{},"startTime":1784587841524,"traceId":"275fb4c4ea495391"},{"name":"clean","duration":42999,"timestamp":5779869279381,"id":7,"parentId":1,"tags":{},"startTime":1784587841526,"traceId":"275fb4c4ea495391"},{"name":"discover-routes","duration":18046,"timestamp":5779869446733,"id":8,"parentId":1,"tags":{},"startTime":1784587841693,"traceId":"275fb4c4ea495391"},{"name":"create-root-mapping","duration":214,"timestamp":5779869464879,"id":9,"parentId":1,"tags":{},"startTime":1784587841711,"traceId":"275fb4c4ea495391"},{"name":"generate-route-types","duration":74829,"timestamp":5779869469760,"id":10,"parentId":1,"tags":{},"startTime":1784587841716,"traceId":"275fb4c4ea495391"},{"name":"public-dir-conflict-check","duration":182,"timestamp":5779869544736,"id":11,"parentId":1,"tags":{},"startTime":1784587841791,"traceId":"275fb4c4ea495391"},{"name":"generate-routes-manifest","duration":9205,"timestamp":5779869545133,"id":12,"parentId":1,"tags":{},"startTime":1784587841791,"traceId":"275fb4c4ea495391"},{"name":"run-turbopack","duration":8786238,"timestamp":5779869566174,"id":14,"parentId":1,"tags":{},"startTime":1784587841812,"traceId":"275fb4c4ea495391"},{"name":"turbopack-build-events","duration":76,"timestamp":5779869939581,"id":15,"parentId":1,"tags":{},"startTime":1784587842186,"traceId":"275fb4c4ea495391"},{"name":"run-typescript","duration":13779176,"timestamp":5779878366323,"id":16,"parentId":1,"tags":{},"startTime":1784587850613,"traceId":"275fb4c4ea495391"},{"name":"generate-required-server-files","duration":3546,"timestamp":5779892146862,"id":18,"parentId":1,"tags":{},"startTime":1784587864393,"traceId":"275fb4c4ea495391"},{"name":"check-static-error-page","duration":24899,"timestamp":5779892417278,"id":20,"parentId":19,"tags":{},"startTime":1784587864664,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":639245,"timestamp":5779892447432,"id":77,"parentId":30,"tags":{},"startTime":1784587864694,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":661097,"timestamp":5779892425761,"id":30,"parentId":19,"tags":{"page":"/api/anet/providers/probe"},"startTime":1784587864672,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":643186,"timestamp":5779892450746,"id":81,"parentId":35,"tags":{},"startTime":1784587864697,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":667305,"timestamp":5779892426741,"id":35,"parentId":19,"tags":{"page":"/api/hub/audit-log"},"startTime":1784587864673,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":659127,"timestamp":5779892446494,"id":74,"parentId":21,"tags":{},"startTime":1784587864693,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":687000,"timestamp":5779892418694,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1784587864665,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":719808,"timestamp":5779892453650,"id":83,"parentId":37,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":745991,"timestamp":5779892427553,"id":37,"parentId":19,"tags":{"page":"/api/hub/broadcast"},"startTime":1784587864674,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":740124,"timestamp":5779892450955,"id":82,"parentId":36,"tags":{},"startTime":1784587864697,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":763827,"timestamp":5779892427343,"id":36,"parentId":19,"tags":{"page":"/api/hub/auth"},"startTime":1784587864674,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":739156,"timestamp":5779892453765,"id":84,"parentId":39,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":765048,"timestamp":5779892427932,"id":39,"parentId":19,"tags":{"page":"/api/hub/health"},"startTime":1784587864674,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":742740,"timestamp":5779892453804,"id":85,"parentId":40,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":768537,"timestamp":5779892428059,"id":40,"parentId":19,"tags":{"page":"/api/hub/inbox"},"startTime":1784587864674,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":752292,"timestamp":5779892453943,"id":86,"parentId":41,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":778119,"timestamp":5779892428162,"id":41,"parentId":19,"tags":{"page":"/api/hub/messages"},"startTime":1784587864674,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":752503,"timestamp":5779892454040,"id":87,"parentId":42,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":778325,"timestamp":5779892428257,"id":42,"parentId":19,"tags":{"page":"/api/hub/networks"},"startTime":1784587864675,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":759025,"timestamp":5779892454072,"id":88,"parentId":43,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":784797,"timestamp":5779892428344,"id":43,"parentId":19,"tags":{"page":"/api/hub/nodes"},"startTime":1784587864675,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":759192,"timestamp":5779892454089,"id":89,"parentId":44,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":784854,"timestamp":5779892428455,"id":44,"parentId":19,"tags":{"page":"/api/hub/register"},"startTime":1784587864675,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":761426,"timestamp":5779892454106,"id":90,"parentId":45,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":787010,"timestamp":5779892428566,"id":45,"parentId":19,"tags":{"page":"/api/hub/send"},"startTime":1784587864675,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":764944,"timestamp":5779892454118,"id":91,"parentId":46,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":790408,"timestamp":5779892428698,"id":46,"parentId":19,"tags":{"page":"/api/hub/server-logs"},"startTime":1784587864675,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":775318,"timestamp":5779892447548,"id":78,"parentId":32,"tags":{},"startTime":1784587864694,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":796570,"timestamp":5779892426348,"id":32,"parentId":19,"tags":{"page":"/api/auth/login"},"startTime":1784587864673,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":769612,"timestamp":5779892454151,"id":93,"parentId":50,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":792603,"timestamp":5779892431200,"id":50,"parentId":19,"tags":{"page":"/api/hub/session"},"startTime":1784587864677,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":773961,"timestamp":5779892454134,"id":92,"parentId":48,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":798994,"timestamp":5779892429160,"id":48,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/health"},"startTime":1784587864675,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":775546,"timestamp":5779892454179,"id":95,"parentId":52,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":796345,"timestamp":5779892433430,"id":52,"parentId":19,"tags":{"page":"/api/hub/status"},"startTime":1784587864680,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":776787,"timestamp":5779892454163,"id":94,"parentId":51,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":797780,"timestamp":5779892433246,"id":51,"parentId":19,"tags":{"page":"/api/hub/stats"},"startTime":1784587864680,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":778792,"timestamp":5779892454196,"id":96,"parentId":53,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":799494,"timestamp":5779892433592,"id":53,"parentId":19,"tags":{"page":"/api/hub/task-events"},"startTime":1784587864680,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":780850,"timestamp":5779892454212,"id":97,"parentId":54,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":801322,"timestamp":5779892433782,"id":54,"parentId":19,"tags":{"page":"/api/hub/tasks"},"startTime":1784587864680,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":783871,"timestamp":5779892454240,"id":99,"parentId":56,"tags":{},"startTime":1784587864701,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":804033,"timestamp":5779892434119,"id":56,"parentId":19,"tags":{"page":"/api/hub/tokens"},"startTime":1784587864680,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":785965,"timestamp":5779892454255,"id":100,"parentId":57,"tags":{},"startTime":1784587864701,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":805971,"timestamp":5779892434288,"id":57,"parentId":19,"tags":{"page":"/api/hub/upload"},"startTime":1784587864681,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":791449,"timestamp":5779892454283,"id":102,"parentId":61,"tags":{},"startTime":1784587864701,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":809887,"timestamp":5779892435890,"id":61,"parentId":19,"tags":{"page":"/manifest.webmanifest"},"startTime":1784587864682,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":785449,"timestamp":5779892468464,"id":103,"parentId":24,"tags":{},"startTime":1784587864715,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":833419,"timestamp":5779892420556,"id":24,"parentId":19,"tags":{"page":"/api/anet/config"},"startTime":1784587864667,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":799961,"timestamp":5779892454266,"id":101,"parentId":58,"tags":{},"startTime":1784587864701,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":819849,"timestamp":5779892434427,"id":58,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1784587864681,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":804844,"timestamp":5779892450531,"id":80,"parentId":34,"tags":{},"startTime":1784587864697,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":828807,"timestamp":5779892426617,"id":34,"parentId":19,"tags":{"page":"/api/auth/v3"},"startTime":1784587864673,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":781898,"timestamp":5779892476776,"id":104,"parentId":25,"tags":{},"startTime":1784587864723,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":835599,"timestamp":5779892423126,"id":25,"parentId":19,"tags":{"page":"/api/anet/host-supervisors"},"startTime":1784587864669,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":763284,"timestamp":5779892496940,"id":105,"parentId":27,"tags":{},"startTime":1784587864743,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":839018,"timestamp":5779892424775,"id":27,"parentId":19,"tags":{"page":"/api/anet/node-create"},"startTime":1784587864671,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":748672,"timestamp":5779892515270,"id":106,"parentId":26,"tags":{},"startTime":1784587864762,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":839573,"timestamp":5779892424396,"id":26,"parentId":19,"tags":{"page":"/api/anet/node-config"},"startTime":1784587864671,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":725178,"timestamp":5779892538930,"id":107,"parentId":28,"tags":{},"startTime":1784587864785,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":838956,"timestamp":5779892425202,"id":28,"parentId":19,"tags":{"page":"/api/anet/node-lifecycle"},"startTime":1784587864671,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":728221,"timestamp":5779892539760,"id":108,"parentId":47,"tags":{},"startTime":1784587864786,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":839267,"timestamp":5779892428813,"id":47,"parentId":19,"tags":{"page":"/api/hub/server/[hostname]/agents"},"startTime":1784587864675,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":708220,"timestamp":5779892564499,"id":111,"parentId":49,"tags":{},"startTime":1784587864811,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":843102,"timestamp":5779892429658,"id":49,"parentId":19,"tags":{"page":"/api/hub/servers"},"startTime":1784587864676,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":717434,"timestamp":5779892555937,"id":110,"parentId":31,"tags":{},"startTime":1784587864802,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":847506,"timestamp":5779892425925,"id":31,"parentId":19,"tags":{"page":"/api/anet/providers"},"startTime":1784587864672,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":659314,"timestamp":5779892621651,"id":112,"parentId":23,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":860689,"timestamp":5779892420350,"id":23,"parentId":19,"tags":{"page":"/admin"},"startTime":1784587864667,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":668075,"timestamp":5779892621724,"id":114,"parentId":60,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":854281,"timestamp":5779892435666,"id":60,"parentId":19,"tags":{"page":"/logs"},"startTime":1784587864682,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":678605,"timestamp":5779892621733,"id":115,"parentId":62,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":864356,"timestamp":5779892436040,"id":62,"parentId":19,"tags":{"page":"/messages"},"startTime":1784587864682,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":846345,"timestamp":5779892454224,"id":98,"parentId":55,"tags":{},"startTime":1784587864700,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":866641,"timestamp":5779892433966,"id":55,"parentId":19,"tags":{"page":"/api/hub/tmux"},"startTime":1784587864680,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":686343,"timestamp":5779892621743,"id":116,"parentId":63,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":871739,"timestamp":5779892436408,"id":63,"parentId":19,"tags":{"page":"/node"},"startTime":1784587864683,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":693971,"timestamp":5779892621762,"id":118,"parentId":66,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":878057,"timestamp":5779892437732,"id":66,"parentId":19,"tags":{"page":"/providers"},"startTime":1784587864684,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":702168,"timestamp":5779892621771,"id":119,"parentId":67,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":885964,"timestamp":5779892438035,"id":67,"parentId":19,"tags":{"page":"/server-logs"},"startTime":1784587864684,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":709733,"timestamp":5779892621780,"id":120,"parentId":68,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":893248,"timestamp":5779892438325,"id":68,"parentId":19,"tags":{"page":"/servers"},"startTime":1784587864685,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":790934,"timestamp":5779892548176,"id":109,"parentId":38,"tags":{},"startTime":1784587864794,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":911519,"timestamp":5779892427667,"id":38,"parentId":19,"tags":{"page":"/api/hub/events"},"startTime":1784587864674,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":723316,"timestamp":5779892621789,"id":121,"parentId":69,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":906590,"timestamp":5779892438586,"id":69,"parentId":19,"tags":{"page":"/settings/networks"},"startTime":1784587864685,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":729396,"timestamp":5779892621807,"id":123,"parentId":72,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"}]
|
|
2
|
+
[{"name":"check-page","duration":910405,"timestamp":5779892441111,"id":72,"parentId":19,"tags":{"page":"/tasks/[id]"},"startTime":1784587864687,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":741078,"timestamp":5779892621710,"id":113,"parentId":59,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":927452,"timestamp":5779892435415,"id":59,"parentId":19,"tags":{"page":"/login"},"startTime":1784587864682,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":741230,"timestamp":5779892621816,"id":124,"parentId":73,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":921539,"timestamp":5779892441539,"id":73,"parentId":19,"tags":{"page":"/tasks"},"startTime":1784587864688,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":927986,"timestamp":5779892446997,"id":75,"parentId":22,"tags":{},"startTime":1784587864693,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":955049,"timestamp":5779892420063,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1784587864666,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":753457,"timestamp":5779892621824,"id":125,"parentId":65,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":938223,"timestamp":5779892437087,"id":65,"parentId":19,"tags":{"page":"/"},"startTime":1784587864683,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":755073,"timestamp":5779892621832,"id":126,"parentId":70,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":938055,"timestamp":5779892438896,"id":70,"parentId":19,"tags":{"page":"/settings"},"startTime":1784587864685,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":774629,"timestamp":5779892621752,"id":117,"parentId":64,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":959776,"timestamp":5779892436735,"id":64,"parentId":19,"tags":{"page":"/nodes"},"startTime":1784587864683,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":968108,"timestamp":5779892447301,"id":76,"parentId":29,"tags":{},"startTime":1784587864694,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":989915,"timestamp":5779892425571,"id":29,"parentId":19,"tags":{"page":"/api/anet/providers/probe-results"},"startTime":1784587864672,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":832006,"timestamp":5779892621798,"id":122,"parentId":71,"tags":{},"startTime":1784587864868,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":1013159,"timestamp":5779892440779,"id":71,"parentId":19,"tags":{"page":"/settings/tokens"},"startTime":1784587864687,"traceId":"275fb4c4ea495391"},{"name":"is-page-static","duration":1082971,"timestamp":5779892447807,"id":79,"parentId":33,"tags":{},"startTime":1784587864694,"traceId":"275fb4c4ea495391"},{"name":"check-page","duration":1104356,"timestamp":5779892426502,"id":33,"parentId":19,"tags":{"page":"/api/auth/logout"},"startTime":1784587864673,"traceId":"275fb4c4ea495391"},{"name":"static-check","duration":1114717,"timestamp":5779892416194,"id":19,"parentId":1,"tags":{},"startTime":1784587864662,"traceId":"275fb4c4ea495391"},{"name":"write-routes-manifest","duration":812,"timestamp":5779893549173,"id":128,"parentId":1,"tags":{},"startTime":1784587865795,"traceId":"275fb4c4ea495391"},{"name":"load-dotenv","duration":66,"timestamp":5779893567481,"id":131,"parentId":130,"tags":{},"startTime":1784587865814,"traceId":"275fb4c4ea495391"},{"name":"run-export-path-map","duration":855,"timestamp":5779893571514,"id":132,"parentId":130,"tags":{},"startTime":1784587865818,"traceId":"275fb4c4ea495391"},{"name":"next-export","duration":958269,"timestamp":5779893565560,"id":130,"parentId":1,"tags":{},"startTime":1784587865812,"traceId":"275fb4c4ea495391"},{"name":"move-exported-app-not-found-","duration":796,"timestamp":5779894528496,"id":133,"parentId":129,"tags":{},"startTime":1784587866775,"traceId":"275fb4c4ea495391"},{"name":"move-exported-app-global-error-","duration":521,"timestamp":5779894529443,"id":134,"parentId":129,"tags":{},"startTime":1784587866776,"traceId":"275fb4c4ea495391"},{"name":"static-generation","duration":975819,"timestamp":5779893556892,"id":129,"parentId":1,"tags":{},"startTime":1784587865803,"traceId":"275fb4c4ea495391"},{"name":"write-routes-manifest","duration":621,"timestamp":5779894533124,"id":135,"parentId":1,"tags":{},"startTime":1784587866779,"traceId":"275fb4c4ea495391"},{"name":"print-tree-view","duration":8102,"timestamp":5779894548771,"id":136,"parentId":1,"tags":{},"startTime":1784587866795,"traceId":"275fb4c4ea495391"},{"name":"write-route-bundle-stats","duration":27515,"timestamp":5779894556931,"id":137,"parentId":1,"tags":{},"startTime":1784587866803,"traceId":"275fb4c4ea495391"},{"name":"telemetry-flush","duration":10735,"timestamp":5779894584494,"id":138,"parentId":1,"tags":{},"startTime":1784587866831,"traceId":"275fb4c4ea495391"},{"name":"next-build","duration":25379438,"timestamp":5779869215834,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1784587841462,"traceId":"275fb4c4ea495391"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":8786238,"timestamp":5779869566174,"id":14,"parentId":1,"tags":{},"startTime":1784587841812,"traceId":"275fb4c4ea495391"},{"name":"turbopack-build-events","duration":76,"timestamp":5779869939581,"id":15,"parentId":1,"tags":{},"startTime":1784587842186,"traceId":"275fb4c4ea495391"},{"name":"run-typescript","duration":13779176,"timestamp":5779878366323,"id":16,"parentId":1,"tags":{},"startTime":1784587850613,"traceId":"275fb4c4ea495391"},{"name":"static-check","duration":1114717,"timestamp":5779892416194,"id":19,"parentId":1,"tags":{},"startTime":1784587864662,"traceId":"275fb4c4ea495391"},{"name":"static-generation","duration":975819,"timestamp":5779893556892,"id":129,"parentId":1,"tags":{},"startTime":1784587865803,"traceId":"275fb4c4ea495391"},{"name":"telemetry-flush","duration":10735,"timestamp":5779894584494,"id":138,"parentId":1,"tags":{},"startTime":1784587866831,"traceId":"275fb4c4ea495391"},{"name":"next-build","duration":25379438,"timestamp":5779869215834,"id":1,"tags":{"buildMode":"default","version":"16.2.3","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1784587841462,"traceId":"275fb4c4ea495391"}]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useState } from 'react';
|
|
3
|
+
import { useState, memo } from 'react';
|
|
4
4
|
import Link from 'next/link';
|
|
5
5
|
import { Session } from './types';
|
|
6
6
|
import { timeAgo } from './utils';
|
|
@@ -23,7 +23,7 @@ const STATUS_CONFIG: Record<string, { bg: string; text: string; dot: string; glo
|
|
|
23
23
|
|
|
24
24
|
const DEFAULT_STATUS = { bg: 'bg-gray-800/50 border-gray-700/30', text: 'text-gray-500', dot: 'bg-gray-500', glow: '' };
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
function AgentCardInner({ session: s, hasSse, sseCount, onChat }: AgentCardProps) {
|
|
27
27
|
const cfg = hasSse ? (STATUS_CONFIG[s.status] || DEFAULT_STATUS) : DEFAULT_STATUS;
|
|
28
28
|
// #260: per-node settings panel (UI-only stub). Local open state — the
|
|
29
29
|
// panel itself is presentational and issues no backend calls.
|
|
@@ -182,3 +182,20 @@ export function AgentCard({ session: s, hasSse, sseCount, onChat }: AgentCardPro
|
|
|
182
182
|
</>
|
|
183
183
|
);
|
|
184
184
|
}
|
|
185
|
+
|
|
186
|
+
/* Loop R6 (性能主线): SWR revalidation hands each card a NEW session object
|
|
187
|
+
every poll/SSE mutate even when nothing changed, so all ~190 cards
|
|
188
|
+
re-rendered on every event. memo + field comparison skips cards whose
|
|
189
|
+
visible data (and the fields the settings panel reads) are unchanged.
|
|
190
|
+
onChat is stable (useCallback in useCommandCenter). */
|
|
191
|
+
const CARD_FIELDS = [
|
|
192
|
+
'alias', 'status', 'agent', 'task', 'progress', 'server', 'updated_at',
|
|
193
|
+
'node_id', 'network_id', 'model', 'runtime', 'channels', 'session_id',
|
|
194
|
+
] as const;
|
|
195
|
+
|
|
196
|
+
export const AgentCard = memo(AgentCardInner, (prev, next) => {
|
|
197
|
+
if (prev.hasSse !== next.hasSse || prev.sseCount !== next.sseCount || prev.onChat !== next.onChat) return false;
|
|
198
|
+
const a = prev.session as unknown as Record<string, unknown>, b = next.session as unknown as Record<string, unknown>;
|
|
199
|
+
for (const k of CARD_FIELDS) if (a[k] !== b[k]) return false;
|
|
200
|
+
return true;
|
|
201
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useState } from 'react';
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
4
|
import { TaskChatPanel } from './TaskChatPanel';
|
|
5
5
|
|
|
6
6
|
interface CommandCenterProps {
|
|
@@ -104,10 +104,12 @@ export function useCommandCenter() {
|
|
|
104
104
|
const [tabs, setTabs] = useState<string[]>([]);
|
|
105
105
|
const [activeTab, setActiveTab] = useState('');
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
// Loop R6: stable identities so memo'd consumers (AgentCard) don't
|
|
108
|
+
// re-render just because the Overview re-rendered.
|
|
109
|
+
const openTab = useCallback((alias: string) => {
|
|
108
110
|
setTabs(prev => prev.includes(alias) ? prev : [...prev, alias]);
|
|
109
111
|
setActiveTab(alias);
|
|
110
|
-
};
|
|
112
|
+
}, []);
|
|
111
113
|
|
|
112
114
|
const closeTab = (alias: string) => {
|
|
113
115
|
setTabs(prev => {
|
|
@@ -28,21 +28,29 @@ type ChatEvent =
|
|
|
28
28
|
older with the year. Exact per-message time survives in the bubble's
|
|
29
29
|
title tooltip. */
|
|
30
30
|
const TIME_GROUP_GAP_MS = 5 * 60 * 1000;
|
|
31
|
-
const WEEKDAYS = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
|
|
32
31
|
|
|
32
|
+
// R4 polish: locale-aware (R3 hardcoded Chinese weekdays — English users saw
|
|
33
|
+
// 星期二). zh keeps the native WeChat wording; other locales get Intl output.
|
|
33
34
|
function formatWeChatTime(value: string): string {
|
|
34
35
|
const t = eventTime(value);
|
|
35
36
|
if (!t) return '';
|
|
36
37
|
const d = new Date(t);
|
|
37
38
|
const now = new Date();
|
|
39
|
+
const zh = typeof navigator !== 'undefined' && (navigator.language || '').toLowerCase().startsWith('zh');
|
|
38
40
|
const hm = `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`;
|
|
39
41
|
const startOfDay = (x: Date) => new Date(x.getFullYear(), x.getMonth(), x.getDate()).getTime();
|
|
40
42
|
const dayDiff = Math.round((startOfDay(now) - startOfDay(d)) / 86400000);
|
|
41
43
|
if (dayDiff === 0) return hm;
|
|
42
|
-
if (dayDiff === 1) return `昨天 ${hm}`;
|
|
43
|
-
if (dayDiff > 1 && dayDiff < 7)
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
if (dayDiff === 1) return zh ? `昨天 ${hm}` : `Yesterday ${hm}`;
|
|
45
|
+
if (dayDiff > 1 && dayDiff < 7) {
|
|
46
|
+
const wd = new Intl.DateTimeFormat(zh ? 'zh-CN' : undefined, { weekday: zh ? 'long' : 'short' }).format(d);
|
|
47
|
+
return `${wd} ${hm}`;
|
|
48
|
+
}
|
|
49
|
+
const md = new Intl.DateTimeFormat(zh ? 'zh-CN' : undefined, {
|
|
50
|
+
month: zh ? 'long' : 'short', day: 'numeric',
|
|
51
|
+
...(d.getFullYear() !== now.getFullYear() ? { year: 'numeric' } : {}),
|
|
52
|
+
}).format(d);
|
|
53
|
+
return `${md} ${hm}`;
|
|
46
54
|
}
|
|
47
55
|
|
|
48
56
|
function eventTime(value?: string) {
|
|
@@ -460,25 +468,61 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
|
|
|
460
468
|
// them and patch the matching bubble immediately. No polling needed for
|
|
461
469
|
// the normal path. The polling block below remains as a safety-net for
|
|
462
470
|
// SSE-unavailable environments / disconnect windows.
|
|
471
|
+
// Loop R5 (实时收消息): the subscription used to be gated on
|
|
472
|
+
// pollingIds>0 — an IDLE panel was deaf, so messages sent to this alias
|
|
473
|
+
// by OTHERS (or replies to tasks sent before mount) only appeared on
|
|
474
|
+
// reopen. R1's shared channel makes an always-on subscription free (no
|
|
475
|
+
// extra connection), so:
|
|
476
|
+
// · new_reply for OUR in-flight sends keeps the fast targeted patch;
|
|
477
|
+
// · any other new_task/new_message/new_reply soft-refreshes the
|
|
478
|
+
// window (debounced 1.5s trailing; runFetch merge-by-id keeps
|
|
479
|
+
// optimistic bubbles, so a refresh never drops an in-flight send).
|
|
480
|
+
const refreshTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
481
|
+
useEffect(() => () => { if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current); }, []);
|
|
463
482
|
useSSE({
|
|
464
483
|
url: '/api/hub/events',
|
|
465
|
-
enabled:
|
|
484
|
+
enabled: true,
|
|
466
485
|
onEvent: async (e: { type?: string; in_reply_to?: string; message_id?: string }) => {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
486
|
+
const t = e?.type || '';
|
|
487
|
+
if (t === 'new_reply' && e.in_reply_to && pollingIds.has(e.in_reply_to)) {
|
|
488
|
+
// Fast path: a reply to a task WE sent from this panel.
|
|
489
|
+
try {
|
|
490
|
+
const res = await fetch(`/api/hub/tasks?task_id=${encodeURIComponent(e.in_reply_to)}`);
|
|
491
|
+
const data = await res.json();
|
|
492
|
+
const updated = data?.tasks?.[0];
|
|
493
|
+
if (!updated) return;
|
|
494
|
+
setMessages(prev => prev.map(m => m.task_id === e.in_reply_to ? { ...m, ...updated } : m));
|
|
495
|
+
if (['replied', 'failed', 'closed', 'expired', 'cancelled'].includes(updated.status)) {
|
|
496
|
+
setPollingIds(prev => { const n = new Set(prev); n.delete(e.in_reply_to!); return n; });
|
|
497
|
+
}
|
|
498
|
+
} catch {}
|
|
499
|
+
return; // handled — don't ALSO soft-refresh for the same event
|
|
500
|
+
}
|
|
501
|
+
if (!['new_task', 'new_message', 'new_reply', 'broadcast'].includes(t)) return;
|
|
502
|
+
if (!historyLoaded) return; // initial load owns the first paint
|
|
503
|
+
if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);
|
|
504
|
+
refreshTimerRef.current = setTimeout(() => {
|
|
505
|
+
runFetch(histLimitRef.current, 12_000);
|
|
506
|
+
}, 1500);
|
|
479
507
|
},
|
|
480
508
|
});
|
|
481
509
|
|
|
510
|
+
// Loop R5b (honest finding): the hub only pushes events on the
|
|
511
|
+
// sender's/recipient's OWN channels — a dashboard observer's channel gets
|
|
512
|
+
// NOTHING for third-party traffic (verified: 12s capture during an
|
|
513
|
+
// api→node send = only "connected"). Until the hub grows an observer
|
|
514
|
+
// stream (ask filed), an OPEN panel soft-refreshes every 15s — paused
|
|
515
|
+
// while the tab is hidden — so incoming messages appear without a
|
|
516
|
+
// reopen. runFetch's merge-by-id keeps optimistic bubbles intact.
|
|
517
|
+
useEffect(() => {
|
|
518
|
+
if (!historyLoaded) return;
|
|
519
|
+
const id = setInterval(() => {
|
|
520
|
+
if (document.visibilityState === 'hidden') return;
|
|
521
|
+
runFetch(histLimitRef.current, 12_000);
|
|
522
|
+
}, 15_000);
|
|
523
|
+
return () => clearInterval(id);
|
|
524
|
+
}, [historyLoaded, runFetch]);
|
|
525
|
+
|
|
482
526
|
// Polling fallback (SSE-unavailable / proxies stripping events).
|
|
483
527
|
// Slow cadence so we're not the bulk of server load — SSE handles the fast path.
|
|
484
528
|
useEffect(() => {
|
|
@@ -580,6 +624,21 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
|
|
|
580
624
|
m.task_id === localTaskId ? { ...m, content: taskContent } : m,
|
|
581
625
|
));
|
|
582
626
|
}
|
|
627
|
+
await postTask(taskContent, sendTo, localTaskId, uploaded);
|
|
628
|
+
} catch (e: unknown) {
|
|
629
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
630
|
+
setMessages(prev => prev.map(m =>
|
|
631
|
+
m.task_id === localTaskId ? { ...m, status: 'failed', result: `❌ network error: ${msg}` } : m,
|
|
632
|
+
));
|
|
633
|
+
}
|
|
634
|
+
setSending(false);
|
|
635
|
+
textareaRef.current?.focus();
|
|
636
|
+
};
|
|
637
|
+
|
|
638
|
+
// Core POST shared by send() and the failed-bubble retry (R4: WeChat-style
|
|
639
|
+
// resend — a failed message shouldn't force the user to retype it).
|
|
640
|
+
const postTask = async (taskContent: string, sendTo: string, localTaskId: string, uploaded: { path: string; url: string }[] = []) => {
|
|
641
|
+
try {
|
|
583
642
|
const res = await fetch('/api/hub/send', {
|
|
584
643
|
method: 'POST',
|
|
585
644
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -607,8 +666,25 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
|
|
|
607
666
|
m.task_id === localTaskId ? { ...m, status: 'failed', result: `❌ network error: ${msg}` } : m,
|
|
608
667
|
));
|
|
609
668
|
}
|
|
610
|
-
|
|
611
|
-
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
// R4: tap-to-retry a failed send — reset the SAME bubble to in-flight and
|
|
672
|
+
// re-POST with identical content/target; no retyping (WeChat red-! flow).
|
|
673
|
+
const retryLockRef = useRef<Set<string>>(new Set());
|
|
674
|
+
const retrySend = async (m: ChatTask) => {
|
|
675
|
+
// R5 (R4 self-review debt): double-click guard — a second tap while the
|
|
676
|
+
// retry POST is in flight must not fire a duplicate send.
|
|
677
|
+
if (retryLockRef.current.has(m.task_id)) return;
|
|
678
|
+
retryLockRef.current.add(m.task_id);
|
|
679
|
+
const cleanContent = m.content;
|
|
680
|
+
setMessages(prev => prev.map(x =>
|
|
681
|
+
x.task_id === m.task_id ? { ...x, status: 'created', result: '' } : x,
|
|
682
|
+
));
|
|
683
|
+
try {
|
|
684
|
+
await postTask(cleanContent, m.to_name, m.task_id);
|
|
685
|
+
} finally {
|
|
686
|
+
retryLockRef.current.delete(m.task_id);
|
|
687
|
+
}
|
|
612
688
|
};
|
|
613
689
|
|
|
614
690
|
const handleKeyDown = (e: React.KeyboardEvent) => {
|
|
@@ -750,7 +826,7 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
|
|
|
750
826
|
const showSep = !prevAt || eventTime(event.at) - eventTime(prevAt) > TIME_GROUP_GAP_MS;
|
|
751
827
|
const sepEl = showSep ? (
|
|
752
828
|
<div className="flex justify-center py-1.5">
|
|
753
|
-
<span className="text-[10px] text-[var(--fg-dim)] bg-
|
|
829
|
+
<span className="text-[10px] text-[var(--fg-dim)] bg-[var(--bg-elevated)] rounded px-2 py-0.5">{formatWeChatTime(event.at)}</span>
|
|
754
830
|
</div>
|
|
755
831
|
) : null;
|
|
756
832
|
// Distinguish task source so users can tell when a peer agent
|
|
@@ -807,7 +883,24 @@ export function TaskChatPanel({ alias, onClose, inline, availableNodes }: TaskCh
|
|
|
807
883
|
</div>
|
|
808
884
|
<div className="flex flex-wrap items-center justify-between mt-1.5 gap-2 sm:gap-3">
|
|
809
885
|
<StatusBar status={m.status} />
|
|
810
|
-
|
|
886
|
+
<div className="flex items-center gap-2 shrink-0">
|
|
887
|
+
{/* R4: WeChat send-feedback loop — spinner while the
|
|
888
|
+
optimistic bubble is still in flight; tap-to-resend
|
|
889
|
+
on failure (same bubble, no retyping). */}
|
|
890
|
+
{m.task_id.startsWith('tmp-') && m.status !== 'failed' && (
|
|
891
|
+
<span aria-label="发送中" className="inline-block h-3 w-3 animate-spin rounded-full border-2 border-cyan-500/30 border-t-cyan-400" />
|
|
892
|
+
)}
|
|
893
|
+
{m.status === 'failed' && fromUser && (
|
|
894
|
+
<button
|
|
895
|
+
type="button"
|
|
896
|
+
onClick={() => retrySend(m)}
|
|
897
|
+
className="inline-flex items-center gap-1 rounded-md border border-red-500/40 bg-red-500/10 px-1.5 py-0.5 text-[10px] font-medium text-red-300 hover:bg-red-500/20"
|
|
898
|
+
>
|
|
899
|
+
<span aria-hidden>↻</span> 重发
|
|
900
|
+
</button>
|
|
901
|
+
)}
|
|
902
|
+
{senderBadge}
|
|
903
|
+
</div>
|
|
811
904
|
</div>
|
|
812
905
|
</div>
|
|
813
906
|
</div>
|
package/package.json
CHANGED