@sleep2agi/agent-network-dashboard 0.1.0-preview.7 → 0.1.0-preview.9
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 +6 -6
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +90 -87
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +8 -8
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
- package/.next/server/app/_global-error.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +3 -3
- 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 +11 -11
- package/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -6
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page/build-manifest.json +3 -3
- 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 +13 -13
- package/.next/server/app/admin.segments/_full.segment.rsc +13 -13
- package/.next/server/app/admin.segments/_head.segment.rsc +4 -4
- package/.next/server/app/admin.segments/_index.segment.rsc +6 -6
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/admin.segments/admin.segment.rsc +3 -3
- package/.next/server/app/api/anet/config/route.js +2 -2
- package/.next/server/app/api/anet/config/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/login/route.js +2 -2
- package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/logout/route.js +2 -2
- package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/v3/route.js +2 -2
- package/.next/server/app/api/auth/v3/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/audit-log/route.js +2 -2
- package/.next/server/app/api/hub/audit-log/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/auth/route.js +2 -2
- package/.next/server/app/api/hub/auth/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/broadcast/route.js +2 -2
- package/.next/server/app/api/hub/broadcast/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/events/route.js +2 -2
- package/.next/server/app/api/hub/events/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/health/route.js +2 -2
- package/.next/server/app/api/hub/health/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/inbox/route.js +2 -2
- package/.next/server/app/api/hub/inbox/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/license/route.js +2 -2
- package/.next/server/app/api/hub/license/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/messages/route.js +2 -2
- package/.next/server/app/api/hub/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/networks/route.js +2 -2
- package/.next/server/app/api/hub/networks/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/nodes/route.js +2 -2
- package/.next/server/app/api/hub/nodes/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/register/route.js +2 -2
- package/.next/server/app/api/hub/register/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/send/route.js +2 -2
- package/.next/server/app/api/hub/send/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/session/route.js +2 -2
- package/.next/server/app/api/hub/session/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/stats/route.js +2 -2
- package/.next/server/app/api/hub/stats/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/status/route.js +2 -2
- package/.next/server/app/api/hub/status/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/task-events/route.js +2 -2
- package/.next/server/app/api/hub/task-events/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/tasks/route.js +2 -2
- package/.next/server/app/api/hub/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/tmux/route.js +2 -2
- package/.next/server/app/api/hub/tmux/route.js.nft.json +1 -1
- package/.next/server/app/api/hub/tokens/route.js +2 -2
- package/.next/server/app/api/hub/tokens/route.js.nft.json +1 -1
- package/.next/server/app/docs/page/build-manifest.json +3 -3
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +2 -2
- package/.next/server/app/docs.rsc +13 -13
- package/.next/server/app/docs.segments/_full.segment.rsc +13 -13
- package/.next/server/app/docs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/docs.segments/_index.segment.rsc +6 -6
- package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/docs.segments/docs.segment.rsc +3 -3
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +13 -13
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +13 -13
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +6 -6
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page/build-manifest.json +3 -3
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +13 -13
- package/.next/server/app/login.segments/_full.segment.rsc +13 -13
- package/.next/server/app/login.segments/_head.segment.rsc +4 -4
- package/.next/server/app/login.segments/_index.segment.rsc +6 -6
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/login.segments/login.segment.rsc +3 -3
- package/.next/server/app/logs/page/build-manifest.json +3 -3
- 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 +13 -13
- package/.next/server/app/logs.segments/_full.segment.rsc +13 -13
- package/.next/server/app/logs.segments/_head.segment.rsc +4 -4
- package/.next/server/app/logs.segments/_index.segment.rsc +6 -6
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/logs.segments/logs.segment.rsc +3 -3
- package/.next/server/app/messages/page/build-manifest.json +3 -3
- 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 +13 -13
- package/.next/server/app/messages.segments/_full.segment.rsc +13 -13
- package/.next/server/app/messages.segments/_head.segment.rsc +4 -4
- package/.next/server/app/messages.segments/_index.segment.rsc +6 -6
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/messages.segments/messages.segment.rsc +3 -3
- package/.next/server/app/node/page/build-manifest.json +3 -3
- package/.next/server/app/node/page.js.nft.json +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 +13 -13
- package/.next/server/app/node.segments/_full.segment.rsc +13 -13
- package/.next/server/app/node.segments/_head.segment.rsc +4 -4
- package/.next/server/app/node.segments/_index.segment.rsc +6 -6
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/node.segments/node.segment.rsc +3 -3
- package/.next/server/app/nodes/page/build-manifest.json +3 -3
- package/.next/server/app/nodes/page.js.nft.json +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 +13 -13
- package/.next/server/app/nodes.segments/_full.segment.rsc +13 -13
- package/.next/server/app/nodes.segments/_head.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/_index.segment.rsc +6 -6
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/nodes.segments/nodes.segment.rsc +3 -3
- package/.next/server/app/page/build-manifest.json +3 -3
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks/page/build-manifest.json +3 -3
- 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 +13 -13
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +13 -13
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +6 -6
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +3 -3
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings/page/build-manifest.json +3 -3
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page/build-manifest.json +3 -3
- 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 +13 -13
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +13 -13
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +6 -6
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +3 -3
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +3 -3
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +13 -13
- package/.next/server/app/settings.segments/_full.segment.rsc +13 -13
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +6 -6
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/tasks/[id]/page/build-manifest.json +3 -3
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page/build-manifest.json +3 -3
- 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 +13 -13
- package/.next/server/app/tasks.segments/_full.segment.rsc +13 -13
- package/.next/server/app/tasks.segments/_head.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/_index.segment.rsc +6 -6
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/tasks.segments/tasks.segment.rsc +3 -3
- package/.next/server/chunks/[root-of-the-server]__0.r9hpx._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0sywwd7._.js.map → [root-of-the-server]__0.r9hpx._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0.~awwb._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__02up7n2._.js.map → [root-of-the-server]__0.~awwb._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__011ghni._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0mmo75i._.js.map → [root-of-the-server]__011ghni._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0_roltz._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__05uypa~._.js.map → [root-of-the-server]__0_roltz._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ak3zmb._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0u9ppm.._.js.map → [root-of-the-server]__0ak3zmb._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0c0_p0v._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0uxkj4r._.js.map → [root-of-the-server]__0c0_p0v._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0c5h0a~._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0hz-gqk._.js.map → [root-of-the-server]__0c5h0a~._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0cfodg2._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0nb8029._.js.map → [root-of-the-server]__0cfodg2._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0fo7jlh._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0m77953._.js.map → [root-of-the-server]__0fo7jlh._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0hj~i84._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0nl3akl._.js.map → [root-of-the-server]__0hj~i84._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0hxwf9u._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__13e9ex0._.js.map → [root-of-the-server]__0hxwf9u._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0k.vegl._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0g16ayc._.js.map → [root-of-the-server]__0k.vegl._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0k3eytp._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0q86a80._.js.map → [root-of-the-server]__0k3eytp._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0khwewd._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__12s1q1.._.js.map → [root-of-the-server]__0khwewd._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ku8l.~._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0344fys._.js.map → [root-of-the-server]__0ku8l.~._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0kx9lo1._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0o1z0_7._.js.map → [root-of-the-server]__0kx9lo1._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0lu__6g._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0150zad._.js.map → [root-of-the-server]__0lu__6g._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0nsfjkb._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0swcbs5._.js.map → [root-of-the-server]__0nsfjkb._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0p3fo6l._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0t0.lss._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__09dhh_t._.js.map → [root-of-the-server]__0t0.lss._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0wpe~w2._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__09kj7n.._.js.map → [root-of-the-server]__0wpe~w2._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0x.-194._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__11aui~e._.js.map → [root-of-the-server]__0x.-194._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__10ducxb._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__10439sp._.js.map → [root-of-the-server]__10ducxb._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__10~rj8b._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0w~31ff._.js.map → [root-of-the-server]__10~rj8b._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__114809t._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0uf_olq._.js.map → [root-of-the-server]__114809t._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__11yl3c.._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__090uiv5._.js.map → [root-of-the-server]__11yl3c.._.js.map} +1 -1
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0yubv2d.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__093ymui._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__093ymui._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nrckjd._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nrckjd._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xm3h9x._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~yad5w._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~yad5w._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +6 -6
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/00uwfd~z5dh.b.js +1 -0
- package/.next/static/chunks/{0io~i_rk3k9q3.js → 060yf6n1jdcri.js} +1 -1
- package/.next/static/chunks/{01bx19dpl~r6u.js → 063eleenll4ri.js} +1 -1
- package/.next/static/chunks/{0fpff4dxg3a5x.js → 08aj9~75raaah.js} +1 -1
- package/.next/static/chunks/{0xqtq9944k~ek.js → 08v0-ki6vwpxf.js} +1 -1
- package/.next/static/chunks/{0tb-yun7e_n3c.js → 09al3qm76q7nd.js} +1 -1
- package/.next/static/chunks/{12t1c0u8~txfo.js → 0afxijuigt-49.js} +1 -1
- package/.next/static/chunks/0dkkv90do9a4r.js +1 -0
- package/.next/static/chunks/{024co7ns8w7ms.js → 0ejz4zwhu3a3y.js} +1 -1
- package/.next/static/chunks/{0ql1nb6991-hi.js → 0h4x8zbbd__pl.js} +1 -1
- package/.next/static/chunks/{02w9ytw8eey3r.js → 0krweyme4bfjm.js} +1 -1
- package/.next/static/chunks/0ogeals5ufhho.js +1 -0
- package/.next/static/chunks/{15-ywchriw.vi.js → 0u359llqm1_01.js} +1 -1
- package/.next/static/chunks/{0~sxxils~iff..js → 0ugk4jd4e7oft.js} +1 -1
- package/.next/static/chunks/{0w.7_h6kx__bg.js → 0uqfv6rc-xdru.js} +1 -1
- package/.next/static/chunks/{11f7871-m2pu4.js → 0vlojka~d~9h4.js} +1 -1
- package/.next/static/chunks/0xakhywf66-mg.js +1 -0
- package/.next/static/chunks/0xenn83e6rq1m.css +2 -0
- package/.next/static/chunks/{0w5hxo645~s.g.js → 0xrnwfefpke-g.js} +2 -2
- package/.next/static/chunks/{0s4w.hhez3.xx.js → 14bsg3_-taiw4.js} +1 -1
- package/.next/static/chunks/{turbopack-0zklppa1rg.u8.js → turbopack-0vsvjs02l449s.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/api/hub/tasks/route.ts +2 -0
- package/app/components/TaskChatPanel.tsx +48 -22
- package/package.json +3 -1
- package/.next/server/chunks/[root-of-the-server]__0150zad._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__02up7n2._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0344fys._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__05uypa~._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__090uiv5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__09dhh_t._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__09kj7n.._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0g16ayc._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0hz-gqk._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0m77953._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0mmo75i._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0nb8029._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0nl3akl._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0o1z0_7._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0q86a80._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0swcbs5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0sywwd7._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0u9ppm.._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0uf_olq._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0uxkj4r._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0w~31ff._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__10439sp._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__11aui~e._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__12s1q1.._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__13e9ex0._.js +0 -3
- package/.next/server/chunks/ssr/_0s2kgzl._.js +0 -3
- package/.next/server/chunks/ssr/_0s2kgzl._.js.map +0 -1
- package/.next/server/chunks/ssr/app_05bbp~.._.js +0 -3
- package/.next/server/chunks/ssr/app_05bbp~.._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0d3prqs._.js +0 -3
- package/.next/server/chunks/ssr/app_0d3prqs._.js.map +0 -1
- package/.next/server/chunks/ssr/app_0p9bx.i._.js +0 -3
- package/.next/server/chunks/ssr/app_0p9bx.i._.js.map +0 -1
- package/.next/static/chunks/06f76ht~w6c6c.js +0 -1
- package/.next/static/chunks/0_qu9.8wo.eq1.css +0 -2
- package/.next/static/chunks/0g5j6.4xxjqd3.js +0 -1
- package/.next/static/chunks/15cp_p75shcm9.js +0 -1
- /package/.next/static/{2rqnf6RwG7ululyvXyiP5 → E8R10krmbjKv-G9MRFxJD}/_buildManifest.js +0 -0
- /package/.next/static/{2rqnf6RwG7ululyvXyiP5 → E8R10krmbjKv-G9MRFxJD}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{2rqnf6RwG7ululyvXyiP5 → E8R10krmbjKv-G9MRFxJD}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../app/components/utils.ts","../../../../app/lib/hooks.ts","../../../../app/nodes/page.tsx"],"sourcesContent":["export function timeAgo(dateStr: string): string {\n if (!dateStr) return '--';\n const diff = Date.now() - new Date(dateStr.replace(' ', 'T') + 'Z').getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return `${s}s ago`;\n if (s < 3600) return `${Math.floor(s / 60)}m ago`;\n if (s < 86400) return `${Math.floor(s / 3600)}h ago`;\n return `${Math.floor(s / 86400)}d ago`;\n}\n\nexport function statusColor(status: string, hasSse: boolean): string {\n if (hasSse && status === 'working') return 'bg-green-500';\n if (hasSse && status === 'idle') return 'bg-emerald-400';\n if (hasSse) return 'bg-blue-400';\n if (status === 'offline') return 'bg-gray-500';\n return 'bg-yellow-400';\n}\n\nexport function formatUptime(seconds: number): string {\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n return `${m}m`;\n}\n","import useSWR from 'swr';\nimport { Session, Health, AnetConfig } from '../components/types';\nimport { useNetworkId } from './network-context';\n\nconst fetcher = async (url: string) => {\n const res = await fetch(url);\n if (res.status === 401) {\n window.location.assign('/login');\n throw new Error('unauthorized');\n }\n return res.json();\n};\n\nconst SWR_OPTIONS = { refreshInterval: 5000, dedupingInterval: 3000 };\n\n/** Append network_id to URL if set */\nfunction withNetwork(url: string, networkId: string): string {\n if (!networkId) return url;\n const sep = url.includes('?') ? '&' : '?';\n return `${url}${sep}network_id=${encodeURIComponent(networkId)}`;\n}\n\nexport function useSessions() {\n const { networkId } = useNetworkId();\n const { data, error, isLoading } = useSWR<{ sessions: Session[]; _hint?: { global_count?: number; filtered_network?: string } }>(\n withNetwork('/api/hub/status', networkId),\n fetcher,\n SWR_OPTIONS,\n );\n return { sessions: data?.sessions || [], hint: data?._hint, error, isLoading };\n}\n\nexport function useHealth() {\n const { data, error } = useSWR<Health>('/api/hub/health', fetcher, SWR_OPTIONS);\n return { health: data || null, error };\n}\n\nexport function useAnetConfig() {\n const { data } = useSWR<AnetConfig>('/api/anet/config', fetcher, { refreshInterval: 30000 });\n return { config: data || null };\n}\n\nexport function useTasks(params?: Record<string, string>) {\n const { networkId } = useNetworkId();\n const query = new URLSearchParams({ limit: '100', ...params }).toString();\n const { data, error, isLoading } = useSWR(\n withNetwork(`/api/hub/tasks?${query}`, networkId),\n fetcher,\n SWR_OPTIONS,\n );\n return {\n tasks: data?.tasks || [],\n count: data?.count ?? 0,\n source: data?.source,\n error,\n isLoading,\n };\n}\n\nexport function useStats() {\n const { networkId } = useNetworkId();\n const { data, error } = useSWR(withNetwork('/api/hub/stats', networkId), fetcher, SWR_OPTIONS);\n return { stats: data?.ok ? data : null, error };\n}\n\nexport function useLicense() {\n const { data, error } = useSWR('/api/hub/license', fetcher, { refreshInterval: 60000 });\n return { license: data?.ok ? data : null, error };\n}\n\nexport function useMessages(limit = 100) {\n const { networkId } = useNetworkId();\n const { data, error, isLoading } = useSWR(\n withNetwork(`/api/hub/messages?limit=${limit}`, networkId),\n fetcher,\n SWR_OPTIONS,\n );\n return { messages: data?.messages || [], error, isLoading };\n}\n\nexport function useNodeSession(alias: string) {\n const { data, error, isLoading } = useSWR(\n alias ? `/api/hub/session?alias=${encodeURIComponent(alias)}` : null,\n fetcher,\n SWR_OPTIONS,\n );\n return {\n session: data?.session || null,\n inbox: data?.inbox || [],\n sse: data?.sse || 0,\n error,\n isLoading,\n };\n}\n","'use client';\n\nimport { useState } from 'react';\nimport Link from 'next/link';\nimport { timeAgo } from '../components/utils';\nimport { useSessions, useHealth } from '../lib/hooks';\nimport { TaskChatPanel } from '../components/TaskChatPanel';\nimport type { Session } from '../components/types';\n\nconst STATUS_COLORS: Record<string, string> = {\n working: 'bg-green-500/10 text-green-300 border-green-500/20',\n idle: 'bg-blue-500/10 text-blue-300 border-blue-500/20',\n blocked: 'bg-yellow-500/10 text-yellow-300 border-yellow-500/20',\n error: 'bg-red-500/10 text-red-300 border-red-500/20',\n offline: 'bg-gray-500/10 text-gray-500 border-gray-500/20',\n};\n\ntype ViewMode = 'list' | 'grid';\ntype SessionRow = Session & { online: boolean };\n\nexport default function NodesPage() {\n const { sessions, isLoading: loading } = useSessions();\n const { health } = useHealth();\n const sseMap = health?.sse_sessions || {};\n const [filterStatus, setFilterStatus] = useState('');\n const [search, setSearch] = useState('');\n const [viewMode, setViewMode] = useState<ViewMode>('list');\n const [taskDrafts, setTaskDrafts] = useState<Record<string, string>>({});\n const [taskOpenFor, setTaskOpenFor] = useState<string | null>(null);\n const [sendState, setSendState] = useState<Record<string, { sending?: boolean; error?: string; success?: string }>>({});\n const [chatAlias, setChatAlias] = useState<string | null>(null);\n\n const filtered: SessionRow[] = sessions\n .map(s => ({ ...s, online: !!sseMap[s.alias] }))\n .filter(s => {\n if (filterStatus === 'online') return s.online;\n if (filterStatus === 'offline') return !s.online;\n if (filterStatus && filterStatus !== s.status) return false;\n return true;\n })\n .filter(s => !search || s.alias.toLowerCase().includes(search.toLowerCase()) || (s.agent || '').toLowerCase().includes(search.toLowerCase()))\n .sort((a, b) => (b.online ? 1 : 0) - (a.online ? 1 : 0) || (b.status === 'working' ? 1 : 0) - (a.status === 'working' ? 1 : 0));\n\n const onlineCount = sessions.filter(s => sseMap[s.alias]).length;\n\n const openSendTask = (alias: string) => {\n setTaskOpenFor(current => current === alias ? null : alias);\n setSendState(prev => ({ ...prev, [alias]: {} }));\n };\n\n const updateTaskDraft = (alias: string, value: string) => {\n setTaskDrafts(prev => ({ ...prev, [alias]: value }));\n };\n\n const sendTask = async (alias: string) => {\n const task = taskDrafts[alias]?.trim() || '';\n if (!task) return;\n\n setSendState(prev => ({ ...prev, [alias]: { sending: true } }));\n\n try {\n const res = await fetch('/api/hub/send', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ alias, task }),\n });\n const data = await res.json();\n\n if (!res.ok || data?.ok === false) {\n throw new Error(data?.error || 'Send failed');\n }\n\n setTaskDrafts(prev => ({ ...prev, [alias]: '' }));\n setSendState(prev => ({ ...prev, [alias]: { success: 'Task sent' } }));\n setTaskOpenFor(null);\n } catch (error: unknown) {\n setSendState(prev => ({\n ...prev,\n [alias]: { error: error instanceof Error ? error.message : 'Send failed' },\n }));\n }\n };\n\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono\">\n <div className=\"flex items-center gap-4 mb-6\">\n <h1 className=\"text-2xl font-bold text-white lg:ml-0 ml-10\">Nodes</h1>\n <span className=\"text-xs bg-green-900/30 text-green-400 px-2 py-0.5 rounded-full border border-green-800/30\">\n {onlineCount} online\n </span>\n <span className=\"text-xs bg-gray-900/30 text-gray-400 px-2 py-0.5 rounded-full border border-gray-800/30\">\n {sessions.length} total\n </span>\n </div>\n\n {/* Status bar */}\n {sessions.length > 0 && (() => {\n const working = filtered.filter(s => s.online && s.status === 'working').length;\n const idle = filtered.filter(s => s.online && s.status === 'idle').length;\n const offline = filtered.filter(s => !s.online).length;\n const total = filtered.length || 1;\n return (\n <div className=\"mb-6\">\n <div className=\"flex h-2 rounded-full overflow-hidden bg-gray-800\">\n {working > 0 && <div className=\"bg-green-500\" style={{ width: `${(working/total)*100}%` }} />}\n {idle > 0 && <div className=\"bg-cyan-500\" style={{ width: `${(idle/total)*100}%` }} />}\n {offline > 0 && <div className=\"bg-gray-600\" style={{ width: `${(offline/total)*100}%` }} />}\n </div>\n <div className=\"flex gap-4 mt-1.5 text-[10px] text-gray-500\">\n {working > 0 && <span><span className=\"inline-block w-2 h-2 rounded-full bg-green-500 mr-1\" />{working} working</span>}\n {idle > 0 && <span><span className=\"inline-block w-2 h-2 rounded-full bg-cyan-500 mr-1\" />{idle} idle</span>}\n {offline > 0 && <span><span className=\"inline-block w-2 h-2 rounded-full bg-gray-600 mr-1\" />{offline} offline</span>}\n </div>\n </div>\n );\n })()}\n\n <div className=\"flex flex-wrap gap-3 mb-6\">\n <input\n type=\"text\"\n value={search}\n onChange={e => setSearch(e.target.value)}\n placeholder=\"Search nodes...\"\n className=\"bg-[#111128] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white placeholder-gray-600 focus:border-blue-500/50 focus:outline-none w-48\"\n />\n <select\n value={filterStatus}\n onChange={e => setFilterStatus(e.target.value)}\n className=\"bg-[#111128] border border-[#2a2a4a] rounded-lg px-3 py-2 text-sm text-white focus:border-blue-500/50 focus:outline-none\"\n >\n <option value=\"\">All</option>\n <option value=\"online\">Online</option>\n <option value=\"offline\">Offline</option>\n <option value=\"working\">Working</option>\n <option value=\"idle\">Idle</option>\n <option value=\"blocked\">Blocked</option>\n <option value=\"error\">Error</option>\n </select>\n <div className=\"ml-auto flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 text-sm\">\n {(['list', 'grid'] as const).map(mode => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => setViewMode(mode)}\n className={`rounded-md px-3 py-1.5 transition-colors ${\n viewMode === mode\n ? 'bg-cyan-500/10 text-cyan-300'\n : 'text-gray-500 hover:text-gray-200'\n }`}\n >\n {mode === 'list' ? 'List' : 'Grid'}\n </button>\n ))}\n </div>\n </div>\n\n {loading ? (\n <div className=\"animate-pulse space-y-2\">\n {[1,2,3,4].map(i => <div key={i} className=\"h-16 bg-gray-800/20 rounded-lg\" />)}\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"text-center py-16 text-gray-600\">No nodes match your filters.</div>\n ) : viewMode === 'grid' ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4\">\n {filtered.map(s => {\n const statusKey = s.online ? s.status : 'offline';\n const state = sendState[s.alias] || {};\n const progress = typeof s.progress === 'number' ? s.progress : 0;\n\n return (\n <div\n key={s.alias}\n className={`relative overflow-hidden rounded-xl border border-[#2a2a4a] bg-[#111128] p-4 transition-colors ${!s.online ? 'opacity-60' : ''}`}\n >\n {!s.online && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <span className=\"rotate-[-20deg] rounded-xl border border-white/10 bg-black/20 px-5 py-2 text-xl font-bold uppercase tracking-[0.35em] text-white/10\">\n Offline\n </span>\n </div>\n )}\n <div className=\"flex items-start justify-between gap-3\">\n <Link href={`/node?alias=${encodeURIComponent(s.alias)}`} className=\"min-w-0 flex-1 hover:text-cyan-300\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-base font-semibold text-white\">{s.alias}</span>\n <span className={`shrink-0 rounded-md border px-2 py-0.5 text-[11px] ${STATUS_COLORS[statusKey] || STATUS_COLORS.offline}`}>\n {statusKey}\n </span>\n </div>\n </Link>\n <div className=\"flex gap-1.5 shrink-0\">\n <button type=\"button\" onClick={() => setChatAlias(s.alias)}\n className=\"rounded-lg border border-green-500/20 bg-green-500/10 px-3 py-1.5 text-xs text-green-300 transition-colors hover:bg-green-500/20\">\n Chat\n </button>\n <button type=\"button\" onClick={() => openSendTask(s.alias)}\n className=\"rounded-lg border border-cyan-500/20 bg-cyan-500/10 px-3 py-1.5 text-xs text-cyan-300 transition-colors hover:bg-cyan-500/20\">\n Task\n </button>\n </div>\n </div>\n\n <div className=\"mt-3 space-y-2 text-xs text-gray-500\">\n <div className=\"flex justify-between gap-3\">\n <span>Agent</span>\n <span className=\"truncate text-gray-300\">{s.agent || '--'}</span>\n </div>\n <div className=\"flex justify-between gap-3\">\n <span>Server</span>\n <span className=\"truncate text-gray-300\">{s.server || '--'}</span>\n </div>\n <div className=\"flex justify-between gap-3\">\n <span>Updated</span>\n <span className=\"text-gray-300\">{timeAgo(s.last_seen_at || s.updated_at)}</span>\n </div>\n </div>\n\n <div className=\"mt-3 rounded-lg border border-[#1a1a2a] bg-[#0a0a15] px-3 py-2 text-xs text-gray-400\">\n {s.task ? s.task : 'No current task'}\n </div>\n\n {progress > 0 && progress < 100 && (\n <div className=\"mt-3 h-1.5 overflow-hidden rounded-full bg-gray-800\">\n <div className=\"h-1.5 rounded-full bg-cyan-400 transition-all\" style={{ width: `${progress}%` }} />\n </div>\n )}\n\n {taskOpenFor === s.alias && (\n <div className=\"mt-4 space-y-2 rounded-lg border border-[#2a2a4a] bg-[#0a0a15] p-3\">\n <input\n type=\"text\"\n value={taskDrafts[s.alias] || ''}\n onChange={e => updateTaskDraft(s.alias, e.target.value)}\n onKeyDown={e => e.key === 'Enter' && sendTask(s.alias)}\n placeholder={`Send task to ${s.alias}...`}\n className=\"w-full rounded-lg border border-[#2a2a4a] bg-[#050510] px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-cyan-500 focus:outline-none\"\n />\n <div className=\"flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => setTaskOpenFor(null)}\n className=\"rounded-lg border border-gray-700 px-3 py-1.5 text-xs text-gray-400 hover:text-gray-200\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={() => sendTask(s.alias)}\n disabled={state.sending || !(taskDrafts[s.alias] || '').trim()}\n className=\"rounded-lg bg-cyan-600 px-3 py-1.5 text-xs text-white hover:bg-cyan-500 disabled:cursor-not-allowed disabled:bg-gray-700\"\n >\n {state.sending ? 'Sending...' : 'Send'}\n </button>\n </div>\n </div>\n )}\n\n {state.error && <div className=\"mt-2 text-xs text-red-400\">{state.error}</div>}\n {state.success && taskOpenFor !== s.alias && <div className=\"mt-2 text-xs text-green-400\">{state.success}</div>}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"space-y-2\">\n <div className=\"hidden sm:grid sm:grid-cols-12 gap-2 px-4 py-2 text-xs text-gray-600 uppercase\">\n <div className=\"col-span-1\">Status</div>\n <div className=\"col-span-2\">Alias</div>\n <div className=\"col-span-2\">Agent</div>\n <div className=\"col-span-2\">Server</div>\n <div className=\"col-span-2\">Current Task</div>\n <div className=\"col-span-1\">Updated</div>\n <div className=\"col-span-2 text-right\">Actions</div>\n </div>\n {filtered.map(s => {\n const statusKey = s.online ? s.status : 'offline';\n const state = sendState[s.alias] || {};\n\n return (\n <div\n key={s.alias}\n className={`rounded-lg border border-[#2a2a4a] bg-[#111128] px-4 py-3 transition-colors hover:border-[#3a3a5a] ${!s.online ? 'opacity-50' : ''}`}\n >\n <div className=\"hidden sm:grid sm:grid-cols-12 gap-2 items-center\">\n <div className=\"col-span-1\">\n <span className={`text-xs px-2 py-0.5 rounded-md border ${STATUS_COLORS[statusKey] || STATUS_COLORS.offline}`}>\n {statusKey}\n </span>\n </div>\n <div className=\"col-span-2 min-w-0\">\n <Link href={`/node?alias=${encodeURIComponent(s.alias)}`} className=\"truncate text-sm font-medium text-white hover:text-cyan-300\">\n {s.alias}\n </Link>\n </div>\n <div className=\"col-span-2 truncate text-xs text-gray-400\">{s.agent || '--'}</div>\n <div className=\"col-span-2 truncate text-xs text-gray-400\">{s.server || '--'}</div>\n <div className=\"col-span-2 truncate text-xs text-gray-500\">{s.task || '--'}</div>\n <div className=\"col-span-1 text-xs text-gray-500\">{timeAgo(s.last_seen_at || s.updated_at)}</div>\n <div className=\"col-span-2 flex justify-end gap-1.5\">\n <button type=\"button\" onClick={() => setChatAlias(s.alias)}\n className=\"rounded-lg border border-green-500/20 bg-green-500/10 px-2 py-1 text-xs text-green-300 hover:bg-green-500/20\">\n Chat\n </button>\n <button type=\"button\" onClick={() => openSendTask(s.alias)}\n className=\"rounded-lg border border-cyan-500/20 bg-cyan-500/10 px-2 py-1 text-xs text-cyan-300 hover:bg-cyan-500/20\">\n Task\n </button>\n </div>\n </div>\n <div className=\"sm:hidden space-y-2\">\n <div className=\"flex items-center justify-between gap-3\">\n <Link href={`/node?alias=${encodeURIComponent(s.alias)}`} className=\"truncate text-sm font-medium text-white hover:text-cyan-300\">\n {s.alias}\n </Link>\n <span className={`shrink-0 text-xs px-2 py-0.5 rounded-md border ${STATUS_COLORS[statusKey] || STATUS_COLORS.offline}`}>\n {statusKey}\n </span>\n </div>\n <div className=\"text-xs text-gray-500\">{s.agent || '--'} · {timeAgo(s.last_seen_at || s.updated_at)}</div>\n {s.task && <div className=\"truncate text-xs text-gray-500\">{s.task}</div>}\n <div className=\"flex gap-2\">\n <button type=\"button\" onClick={() => setChatAlias(s.alias)}\n className=\"flex-1 rounded-lg border border-green-500/20 bg-green-500/10 px-3 py-2 text-xs text-green-300 hover:bg-green-500/20\">\n Chat\n </button>\n <button type=\"button\" onClick={() => openSendTask(s.alias)}\n className=\"flex-1 rounded-lg border border-cyan-500/20 bg-cyan-500/10 px-3 py-2 text-xs text-cyan-300 hover:bg-cyan-500/20\">\n Send Task\n </button>\n </div>\n </div>\n\n {taskOpenFor === s.alias && (\n <div className=\"mt-3 space-y-2 border-t border-[#2a2a4a] pt-3\">\n <input\n type=\"text\"\n value={taskDrafts[s.alias] || ''}\n onChange={e => updateTaskDraft(s.alias, e.target.value)}\n onKeyDown={e => e.key === 'Enter' && sendTask(s.alias)}\n placeholder={`Send task to ${s.alias}...`}\n className=\"w-full rounded-lg border border-[#2a2a4a] bg-[#0a0a15] px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-cyan-500 focus:outline-none\"\n />\n <div className=\"flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={() => setTaskOpenFor(null)}\n className=\"rounded-lg border border-gray-700 px-3 py-1.5 text-xs text-gray-400 hover:text-gray-200\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={() => sendTask(s.alias)}\n disabled={state.sending || !(taskDrafts[s.alias] || '').trim()}\n className=\"rounded-lg bg-cyan-600 px-3 py-1.5 text-xs text-white hover:bg-cyan-500 disabled:cursor-not-allowed disabled:bg-gray-700\"\n >\n {state.sending ? 'Sending...' : 'Send'}\n </button>\n </div>\n </div>\n )}\n\n {state.error && <div className=\"mt-2 text-xs text-red-400\">{state.error}</div>}\n {state.success && taskOpenFor !== s.alias && <div className=\"mt-2 text-xs text-green-400\">{state.success}</div>}\n </div>\n );\n })}\n </div>\n )}\n\n {chatAlias && <TaskChatPanel alias={chatAlias} onClose={() => setChatAlias(null)} />}\n </div>\n );\n}\n"],"names":["timeAgo","dateStr","diff","Date","now","replace","getTime","s","Math","floor","statusColor","status","hasSse","formatUptime","seconds","h","m","fetcher","url","res","fetch","window","location","assign","Error","json","SWR_OPTIONS","refreshInterval","dedupingInterval","withNetwork","networkId","sep","includes","encodeURIComponent","useSessions","data","error","isLoading","sessions","hint","_hint","useHealth","health","useAnetConfig","config","useTasks","params","query","URLSearchParams","limit","toString","tasks","count","source","useStats","stats","ok","useLicense","license","useMessages","messages","useNodeSession","alias","session","inbox","sse","STATUS_COLORS","working","idle","blocked","offline","NodesPage","loading","sseMap","sse_sessions","filterStatus","setFilterStatus","search","setSearch","viewMode","setViewMode","taskDrafts","setTaskDrafts","taskOpenFor","setTaskOpenFor","sendState","setSendState","chatAlias","setChatAlias","filtered","map","online","filter","toLowerCase","agent","sort","a","b","onlineCount","length","openSendTask","current","prev","updateTaskDraft","value","sendTask","task","trim","sending","method","headers","body","JSON","stringify","success","message","className","total","style","width","type","onChange","e","target","placeholder","mode","onClick","i","statusKey","state","progress","href","server","last_seen_at","updated_at","onKeyDown","key","disabled","onClose"],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[43515,a=>{"use strict";a.s(["formatUptime",0,function(a){let b=Math.floor(a/3600),c=Math.floor(a%3600/60);return b>0?`${b}h ${c}m`:`${c}m`},"timeAgo",0,function(a){if(!a)return"--";let b=Math.floor((Date.now()-new Date(a.replace(" ","T")+"Z").getTime())/1e3);return b<60?`${b}s ago`:b<3600?`${Math.floor(b/60)}m ago`:b<86400?`${Math.floor(b/3600)}h ago`:`${Math.floor(b/86400)}d ago`}])},44332,a=>{"use strict";var b=a.i(72596),c=a.i(22397);let d=async a=>{let b=await fetch(a);if(401===b.status)throw window.location.assign("/login"),Error("unauthorized");return b.json()},e={refreshInterval:5e3,dedupingInterval:3e3};function f(a,b){if(!b)return a;let c=a.includes("?")?"&":"?";return`${a}${c}network_id=${encodeURIComponent(b)}`}a.s(["useAnetConfig",0,function(){let{data:a}=(0,b.default)("/api/anet/config",d,{refreshInterval:3e4});return{config:a||null}},"useHealth",0,function(){let{data:a,error:c}=(0,b.default)("/api/hub/health",d,e);return{health:a||null,error:c}},"useLicense",0,function(){let{data:a,error:c}=(0,b.default)("/api/hub/license",d,{refreshInterval:6e4});return{license:a?.ok?a:null,error:c}},"useMessages",0,function(a=100){let{networkId:g}=(0,c.useNetworkId)(),{data:h,error:i,isLoading:j}=(0,b.default)(f(`/api/hub/messages?limit=${a}`,g),d,e);return{messages:h?.messages||[],error:i,isLoading:j}},"useSessions",0,function(){let{networkId:a}=(0,c.useNetworkId)(),{data:g,error:h,isLoading:i}=(0,b.default)(f("/api/hub/status",a),d,e);return{sessions:g?.sessions||[],hint:g?._hint,error:h,isLoading:i}},"useStats",0,function(){let{networkId:a}=(0,c.useNetworkId)(),{data:g,error:h}=(0,b.default)(f("/api/hub/stats",a),d,e);return{stats:g?.ok?g:null,error:h}},"useTasks",0,function(a){let{networkId:g}=(0,c.useNetworkId)(),h=new URLSearchParams({limit:"100",...a}).toString(),{data:i,error:j,isLoading:k}=(0,b.default)(f(`/api/hub/tasks?${h}`,g),d,e);return{tasks:i?.tasks||[],count:i?.count??0,source:i?.source,error:j,isLoading:k}}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=app_0d3prqs._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../app/components/utils.ts","../../../../app/lib/hooks.ts"],"sourcesContent":["export function timeAgo(dateStr: string): string {\n if (!dateStr) return '--';\n const diff = Date.now() - new Date(dateStr.replace(' ', 'T') + 'Z').getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return `${s}s ago`;\n if (s < 3600) return `${Math.floor(s / 60)}m ago`;\n if (s < 86400) return `${Math.floor(s / 3600)}h ago`;\n return `${Math.floor(s / 86400)}d ago`;\n}\n\nexport function statusColor(status: string, hasSse: boolean): string {\n if (hasSse && status === 'working') return 'bg-green-500';\n if (hasSse && status === 'idle') return 'bg-emerald-400';\n if (hasSse) return 'bg-blue-400';\n if (status === 'offline') return 'bg-gray-500';\n return 'bg-yellow-400';\n}\n\nexport function formatUptime(seconds: number): string {\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n return `${m}m`;\n}\n","import useSWR from 'swr';\nimport { Session, Health, AnetConfig } from '../components/types';\nimport { useNetworkId } from './network-context';\n\nconst fetcher = async (url: string) => {\n const res = await fetch(url);\n if (res.status === 401) {\n window.location.assign('/login');\n throw new Error('unauthorized');\n }\n return res.json();\n};\n\nconst SWR_OPTIONS = { refreshInterval: 5000, dedupingInterval: 3000 };\n\n/** Append network_id to URL if set */\nfunction withNetwork(url: string, networkId: string): string {\n if (!networkId) return url;\n const sep = url.includes('?') ? '&' : '?';\n return `${url}${sep}network_id=${encodeURIComponent(networkId)}`;\n}\n\nexport function useSessions() {\n const { networkId } = useNetworkId();\n const { data, error, isLoading } = useSWR<{ sessions: Session[]; _hint?: { global_count?: number; filtered_network?: string } }>(\n withNetwork('/api/hub/status', networkId),\n fetcher,\n SWR_OPTIONS,\n );\n return { sessions: data?.sessions || [], hint: data?._hint, error, isLoading };\n}\n\nexport function useHealth() {\n const { data, error } = useSWR<Health>('/api/hub/health', fetcher, SWR_OPTIONS);\n return { health: data || null, error };\n}\n\nexport function useAnetConfig() {\n const { data } = useSWR<AnetConfig>('/api/anet/config', fetcher, { refreshInterval: 30000 });\n return { config: data || null };\n}\n\nexport function useTasks(params?: Record<string, string>) {\n const { networkId } = useNetworkId();\n const query = new URLSearchParams({ limit: '100', ...params }).toString();\n const { data, error, isLoading } = useSWR(\n withNetwork(`/api/hub/tasks?${query}`, networkId),\n fetcher,\n SWR_OPTIONS,\n );\n return {\n tasks: data?.tasks || [],\n count: data?.count ?? 0,\n source: data?.source,\n error,\n isLoading,\n };\n}\n\nexport function useStats() {\n const { networkId } = useNetworkId();\n const { data, error } = useSWR(withNetwork('/api/hub/stats', networkId), fetcher, SWR_OPTIONS);\n return { stats: data?.ok ? data : null, error };\n}\n\nexport function useLicense() {\n const { data, error } = useSWR('/api/hub/license', fetcher, { refreshInterval: 60000 });\n return { license: data?.ok ? data : null, error };\n}\n\nexport function useMessages(limit = 100) {\n const { networkId } = useNetworkId();\n const { data, error, isLoading } = useSWR(\n withNetwork(`/api/hub/messages?limit=${limit}`, networkId),\n fetcher,\n SWR_OPTIONS,\n );\n return { messages: data?.messages || [], error, isLoading };\n}\n\nexport function useNodeSession(alias: string) {\n const { data, error, isLoading } = useSWR(\n alias ? `/api/hub/session?alias=${encodeURIComponent(alias)}` : null,\n fetcher,\n SWR_OPTIONS,\n );\n return {\n session: data?.session || null,\n inbox: data?.inbox || [],\n sse: data?.sse || 0,\n error,\n isLoading,\n };\n}\n"],"names":["timeAgo","dateStr","diff","Date","now","replace","getTime","s","Math","floor","statusColor","status","hasSse","formatUptime","seconds","h","m","fetcher","url","res","fetch","window","location","assign","Error","json","SWR_OPTIONS","refreshInterval","dedupingInterval","withNetwork","networkId","sep","includes","encodeURIComponent","useSessions","data","error","isLoading","sessions","hint","_hint","useHealth","health","useAnetConfig","config","useTasks","params","query","URLSearchParams","limit","toString","tasks","count","source","useStats","stats","ok","useLicense","license","useMessages","messages","useNodeSession","alias","session","inbox","sse"],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[43515,a=>{"use strict";a.s(["formatUptime",0,function(a){let b=Math.floor(a/3600),c=Math.floor(a%3600/60);return b>0?`${b}h ${c}m`:`${c}m`},"timeAgo",0,function(a){if(!a)return"--";let b=Math.floor((Date.now()-new Date(a.replace(" ","T")+"Z").getTime())/1e3);return b<60?`${b}s ago`:b<3600?`${Math.floor(b/60)}m ago`:b<86400?`${Math.floor(b/3600)}h ago`:`${Math.floor(b/86400)}d ago`}])},35131,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(38246),f=a.i(15261),g=a.i(43515);function h({tmuxName:a}){let[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(!1),[i,j]=(0,c.useState)(!1),k=async()=>{g(!0);try{let b=await fetch(`/api/hub/tmux?name=${encodeURIComponent(a)}`),c=await b.json();e(c.output||c.error||"No output")}catch{e("Failed to fetch")}g(!1)};return(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsxs)("h2",{className:"text-sm font-semibold text-gray-300",children:["Terminal (",a,")"]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("button",{onClick:k,disabled:f,className:"text-xs text-cyan-400 hover:text-cyan-300 disabled:text-gray-600",children:f?"Loading...":"Capture"}),d&&(0,b.jsx)("button",{onClick:()=>j(!i),className:"text-xs text-gray-500 hover:text-gray-300",children:i?"Collapse":"Expand"})]})]}),d&&(0,b.jsx)("pre",{className:`text-[11px] text-green-300 bg-[#050510] rounded-lg px-3 py-2 border border-[#1a1a2a] overflow-x-auto whitespace-pre font-mono ${i?"max-h-96":"max-h-32"} overflow-y-auto`,children:d}),!d&&(0,b.jsx)("p",{className:"text-xs text-gray-600",children:"Click Capture to view terminal output"})]})}function i(){let a=(0,d.useSearchParams)().get("alias")||"",[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)([]),[k,l]=(0,c.useState)(0),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(!1),s=(0,c.useCallback)(async()=>{if(a)try{let b=await fetch(`/api/hub/session?alias=${encodeURIComponent(a)}`),c=await b.json();c.session&&g(c.session),c.inbox&&i(c.inbox),l(c.sse||0),n("")}catch(a){n(a instanceof Error?a.message:"fetch failed")}},[a]);(0,c.useEffect)(()=>{s();let a=setInterval(s,5e3);return()=>clearInterval(a)},[s]);let[t,u]=(0,c.useState)(""),v=async()=>{if(o.trim()&&a){r(!0),u("");try{let b=await fetch("/api/hub/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({alias:a,task:o})}),c=await b.json();c.ok?(p(""),setTimeout(s,2e3)):u(c.error||"Send failed")}catch(a){u(a instanceof Error?a.message:"Send failed")}r(!1)}};if(!a)return(0,b.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono flex items-center justify-center",children:(0,b.jsxs)("p",{className:"text-gray-500",children:["No alias specified. ",(0,b.jsx)(e.default,{href:"/",className:"text-blue-400 hover:underline",children:"Back to dashboard"})]})});let w=f?.status==="working"?"text-green-400":f?.status==="idle"?"text-blue-400":"text-gray-500";return(0,b.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,b.jsxs)("div",{className:"flex items-center gap-4 mb-6",children:[(0,b.jsx)(e.default,{href:"/nodes",className:"text-gray-500 hover:text-gray-300 text-sm lg:ml-0 ml-10",children:"← Nodes"}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:`inline-block w-3 h-3 rounded-full ${k>0?f?.status==="working"?"bg-green-500 animate-pulse":"bg-emerald-400":"bg-gray-500"}`}),(0,b.jsx)("h1",{className:"text-2xl font-bold text-white",children:a}),(0,b.jsx)("span",{className:`text-sm ${w}`,children:f?.status||"unknown"})]})]}),m&&(0,b.jsx)("div",{className:"bg-red-900/20 border border-red-800/40 text-red-300 px-4 py-2 rounded-lg mb-6 text-sm",children:m}),(0,b.jsx)(j,{alias:a,session:f,sse:k,sendMsg:o,setSendMsg:p,sending:q,sendTask:v,sendError:t})]})}function j({alias:a,session:d,sse:e,sendMsg:g,setSendMsg:i,sending:k,sendTask:m,sendError:n}){let[o,p]=(0,c.useState)("chat"),[q,r]=(0,c.useState)([]),[s,t]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{"events"!==o||s||fetch("/api/hub/task-events?limit=50").then(a=>a.json()).then(a=>{r(a.events||[]),t(!0)}).catch(()=>t(!0))},[o,s]),(0,b.jsxs)("div",{className:"bg-[#0d0d1a] border border-[#2a2a4a] rounded-xl overflow-hidden h-[calc(100vh-140px)] flex flex-col",children:[(0,b.jsx)("div",{className:"flex border-b border-[#2a2a4a] bg-[#0a0a15] shrink-0",children:["chat","events","info"].map(a=>(0,b.jsx)("button",{onClick:()=>p(a),className:`px-5 py-3 text-sm font-medium border-b-2 transition-colors ${o===a?"border-cyan-400 text-cyan-300":"border-transparent text-gray-500 hover:text-gray-300"}`,children:"chat"===a?"💬 Chat":"events"===a?"📋 Events":"📊 Info"},a))}),(0,b.jsxs)("div",{className:"flex-1 overflow-hidden",children:["chat"===o&&(0,b.jsx)(f.TaskChatPanel,{alias:a,onClose:()=>{},inline:!0}),"events"===o&&(0,b.jsx)(l,{events:q,loading:!s}),"info"===o&&(0,b.jsxs)("div",{className:"p-4 overflow-y-auto h-full space-y-4 max-w-2xl",children:[(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Node Info"}),(0,b.jsx)("div",{className:"space-y-2 text-xs",children:[{label:"Node ID",value:d?.node_id,alwaysShow:!0},{label:"Session ID",value:d?.session_id,alwaysShow:!0},{label:"Resume ID",value:d?.resume_id,alwaysShow:!0},{label:"Alias",value:d?.alias,alwaysShow:!0},{label:"Agent",value:d?.agent,alwaysShow:!0},{label:"Model",value:d?.model,alwaysShow:!0},{label:"Version",value:d?.version},{label:"Server",value:d?.server,alwaysShow:!0},{label:"Hostname",value:d?.hostname,alwaysShow:!0},{label:"IP",value:d?.ip,alwaysShow:!0},{label:"Project",value:d?.project_dir},{label:"Config",value:d?.config_path,alwaysShow:!0},{label:"Channels",value:d?.channels?.length?Array.isArray(d.channels)?d.channels.join(", "):d.channels:null,alwaysShow:!0},{label:"Tmux",value:d?.tmux_name},{label:"SSE",value:e>0?`Connected (${e})`:"Disconnected",alwaysShow:!0},{label:"Progress",value:d?.progress?`${d.progress}%`:null},{label:"Score",value:d?.score},{label:"Last Seen",value:d?.last_seen_at,alwaysShow:!0},{label:"Registered",value:d?.registered_at,alwaysShow:!0},{label:"Updated",value:d?.updated_at,alwaysShow:!0}].map(({label:a,value:c,alwaysShow:d})=>c||d?(0,b.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,b.jsx)("span",{className:"text-gray-500 shrink-0",children:a}),(0,b.jsx)("span",{className:"text-gray-300 truncate max-w-[200px]",title:c?String(c):"--",children:c?String(c):"--"})]},a):null)})]}),d?.task&&(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Current Task"}),(0,b.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap",children:d.task})]}),d?.output&&(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Last Output"}),(0,b.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap max-h-48 overflow-y-auto",children:d.output})]}),(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Send Task"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("input",{type:"text",value:g,onChange:a=>i(a.target.value),onKeyDown:a=>"Enter"===a.key&&m(),placeholder:`Send task to ${a}...`,className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-blue-500 focus:outline-none"}),(0,b.jsx)("button",{onClick:m,disabled:k||!g.trim(),className:"px-3 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-700 text-white text-xs rounded transition-colors",children:k?"...":"Send"})]}),n&&(0,b.jsx)("div",{className:"mt-2 text-xs text-red-400",children:n})]}),d?.tmux_name&&(0,b.jsx)(h,{tmuxName:d.tmux_name})]})]})]})}let k={delivered:{dot:"bg-blue-400",line:"bg-blue-500/30",icon:"📬"},acked:{dot:"bg-yellow-400",line:"bg-yellow-500/30",icon:"✅"},running:{dot:"bg-green-400",line:"bg-green-500/30",icon:"⚡"},replied:{dot:"bg-purple-400",line:"bg-purple-500/30",icon:"💬"},failed:{dot:"bg-red-400",line:"bg-red-500/30",icon:"❌"},created:{dot:"bg-gray-400",line:"bg-gray-500/30",icon:"📝"}};function l({events:a,loading:c}){if(c)return(0,b.jsx)("div",{className:"flex justify-center py-8",children:(0,b.jsx)("div",{className:"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin"})});if(0===a.length)return(0,b.jsx)("div",{className:"text-center py-12 text-gray-600 text-xs",children:"No task events yet"});let d=new Map;return a.forEach(a=>{let b=a.task_id||`ungrouped-${a.id}`,c=d.get(b)||[];c.push(a),d.set(b,c)}),(0,b.jsx)("div",{className:"p-4 overflow-y-auto h-full space-y-4",children:[...d.entries()].map(([a,c])=>(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsxs)("div",{className:"text-[10px] text-gray-600 mb-3 truncate",children:["Task: ",a.slice(0,20),"..."]}),(0,b.jsxs)("div",{className:"relative pl-6",children:[(0,b.jsx)("div",{className:"absolute left-[9px] top-2 bottom-2 w-0.5 bg-[#1a1a2a]"}),c.map((a,c)=>{let d=k[a.to_status]||k.created;return(0,b.jsxs)("div",{className:"relative pb-4 last:pb-0",children:[(0,b.jsx)("div",{className:`absolute -left-6 top-0.5 w-[18px] h-[18px] rounded-full ${d.dot} flex items-center justify-center text-[9px] z-10 border-2 border-[#111128]`,children:d.icon.length<=2?d.icon:""}),(0,b.jsxs)("div",{className:"ml-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:`text-xs font-medium ${"failed"===a.to_status?"text-red-400":"replied"===a.to_status?"text-purple-400":"text-gray-300"}`,children:a.event_type}),a.from_status&&(0,b.jsxs)("span",{className:"text-[10px] text-gray-600",children:[a.from_status," → ",a.to_status]}),(0,b.jsx)("span",{className:"text-[10px] text-gray-600 ml-auto",children:(0,g.timeAgo)(a.created_at)})]}),a.detail&&(0,b.jsxs)("div",{className:"text-[11px] text-gray-500 mt-0.5 truncate",children:[a.detail.slice(0,50),a.detail.length>50?"...":""]})]})]},a.id)})]})]},a))})}a.s(["default",0,function(){return(0,b.jsx)(c.Suspense,{fallback:(0,b.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono",children:"Loading..."}),children:(0,b.jsx)(i,{})})}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=app_0p9bx.i._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../app/components/utils.ts","../../../../app/node/page.tsx"],"sourcesContent":["export function timeAgo(dateStr: string): string {\n if (!dateStr) return '--';\n const diff = Date.now() - new Date(dateStr.replace(' ', 'T') + 'Z').getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return `${s}s ago`;\n if (s < 3600) return `${Math.floor(s / 60)}m ago`;\n if (s < 86400) return `${Math.floor(s / 3600)}h ago`;\n return `${Math.floor(s / 86400)}d ago`;\n}\n\nexport function statusColor(status: string, hasSse: boolean): string {\n if (hasSse && status === 'working') return 'bg-green-500';\n if (hasSse && status === 'idle') return 'bg-emerald-400';\n if (hasSse) return 'bg-blue-400';\n if (status === 'offline') return 'bg-gray-500';\n return 'bg-yellow-400';\n}\n\nexport function formatUptime(seconds: number): string {\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n return `${m}m`;\n}\n","'use client';\n\nimport { useEffect, useState, useCallback } from 'react';\nimport { useSearchParams } from 'next/navigation';\nimport Link from 'next/link';\nimport { Suspense } from 'react';\nimport { TaskChatPanel } from '../components/TaskChatPanel';\nimport { timeAgo } from '../components/utils';\n\ninterface SessionDetail {\n resume_id: string;\n alias: string;\n status: string;\n agent: string;\n server: string;\n hostname: string;\n task: string;\n output: string;\n progress: number;\n score: number;\n registered_at: string;\n updated_at: string;\n project_dir: string;\n tmux_name: string;\n ip: string;\n node_id: string;\n session_id: string;\n config_path: string;\n channels: string[];\n last_seen_at: string;\n model: string;\n version: string;\n}\n\ninterface Message {\n id: string;\n content: string;\n from_session: string;\n priority: string;\n created_at: string;\n type: string;\n}\n\nfunction TmuxViewer({ tmuxName }: { tmuxName: string }) {\n const [output, setOutput] = useState('');\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n const fetchTmux = async () => {\n setLoading(true);\n try {\n const res = await fetch(`/api/hub/tmux?name=${encodeURIComponent(tmuxName)}`);\n const data = await res.json();\n setOutput(data.output || data.error || 'No output');\n } catch { setOutput('Failed to fetch'); }\n setLoading(false);\n };\n\n return (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <div className=\"flex items-center justify-between mb-2\">\n <h2 className=\"text-sm font-semibold text-gray-300\">Terminal ({tmuxName})</h2>\n <div className=\"flex gap-2\">\n <button onClick={fetchTmux} disabled={loading}\n className=\"text-xs text-cyan-400 hover:text-cyan-300 disabled:text-gray-600\">\n {loading ? 'Loading...' : 'Capture'}\n </button>\n {output && (\n <button onClick={() => setExpanded(!expanded)} className=\"text-xs text-gray-500 hover:text-gray-300\">\n {expanded ? 'Collapse' : 'Expand'}\n </button>\n )}\n </div>\n </div>\n {output && (\n <pre className={`text-[11px] text-green-300 bg-[#050510] rounded-lg px-3 py-2 border border-[#1a1a2a] overflow-x-auto whitespace-pre font-mono ${expanded ? 'max-h-96' : 'max-h-32'} overflow-y-auto`}>\n {output}\n </pre>\n )}\n {!output && <p className=\"text-xs text-gray-600\">Click Capture to view terminal output</p>}\n </div>\n );\n}\n\nfunction NodeDetailContent() {\n const searchParams = useSearchParams();\n const alias = searchParams.get('alias') || '';\n const [session, setSession] = useState<SessionDetail | null>(null);\n const [inbox, setInbox] = useState<Message[]>([]);\n const [sse, setSse] = useState(0);\n const [error, setError] = useState('');\n const [sendMsg, setSendMsg] = useState('');\n const [sending, setSending] = useState(false);\n\n const fetchData = useCallback(async () => {\n if (!alias) return;\n try {\n const res = await fetch(`/api/hub/session?alias=${encodeURIComponent(alias)}`);\n const data = await res.json();\n if (data.session) setSession(data.session);\n if (data.inbox) setInbox(data.inbox);\n setSse(data.sse || 0);\n setError('');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'fetch failed');\n }\n }, [alias]);\n\n useEffect(() => {\n fetchData();\n const interval = setInterval(fetchData, 5000);\n return () => clearInterval(interval);\n }, [fetchData]);\n\n const [sendError, setSendError] = useState('');\n\n const sendTask = async () => {\n if (!sendMsg.trim() || !alias) return;\n setSending(true);\n setSendError('');\n try {\n const res = await fetch('/api/hub/send', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ alias, task: sendMsg }),\n });\n const data = await res.json();\n if (data.ok) {\n setSendMsg('');\n setTimeout(fetchData, 2000);\n } else {\n setSendError(data.error || 'Send failed');\n }\n } catch (e: unknown) {\n setSendError(e instanceof Error ? e.message : 'Send failed');\n }\n setSending(false);\n };\n\n if (!alias) {\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono flex items-center justify-center\">\n <p className=\"text-gray-500\">No alias specified. <Link href=\"/\" className=\"text-blue-400 hover:underline\">Back to dashboard</Link></p>\n </div>\n );\n }\n\n const statusColor = session?.status === 'working' ? 'text-green-400' :\n session?.status === 'idle' ? 'text-blue-400' : 'text-gray-500';\n\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono\">\n {/* Header */}\n <div className=\"flex items-center gap-4 mb-6\">\n <Link href=\"/nodes\" className=\"text-gray-500 hover:text-gray-300 text-sm lg:ml-0 ml-10\">← Nodes</Link>\n <div className=\"flex items-center gap-3\">\n <span className={`inline-block w-3 h-3 rounded-full ${\n sse > 0 ? (session?.status === 'working' ? 'bg-green-500 animate-pulse' : 'bg-emerald-400') : 'bg-gray-500'\n }`} />\n <h1 className=\"text-2xl font-bold text-white\">{alias}</h1>\n <span className={`text-sm ${statusColor}`}>{session?.status || 'unknown'}</span>\n </div>\n </div>\n\n {error && (\n <div className=\"bg-red-900/20 border border-red-800/40 text-red-300 px-4 py-2 rounded-lg mb-6 text-sm\">{error}</div>\n )}\n\n {/* Full-width tabbed layout */}\n <NodeFullPanel alias={alias} session={session} sse={sse} sendMsg={sendMsg} setSendMsg={setSendMsg} sending={sending} sendTask={sendTask} sendError={sendError} />\n </div>\n );\n}\n\nfunction NodeFullPanel({ alias, session, sse, sendMsg, setSendMsg, sending, sendTask, sendError }: {\n alias: string; session: any; sse: number; sendMsg: string; setSendMsg: (v: string) => void; sending: boolean; sendTask: () => void; sendError: string;\n}) {\n const [tab, setTab] = useState<'chat' | 'events' | 'info'>('chat');\n const [events, setEvents] = useState<Array<{ id: number; event_type: string; from_status: string; to_status: string; detail: string; created_at: string }>>([]);\n const [eventsLoaded, setEventsLoaded] = useState(false);\n\n useEffect(() => {\n if (tab === 'events' && !eventsLoaded) {\n fetch('/api/hub/task-events?limit=50').then(r => r.json()).then(d => {\n setEvents(d.events || []);\n setEventsLoaded(true);\n }).catch(() => setEventsLoaded(true));\n }\n }, [tab, eventsLoaded]);\n\n return (\n <div className=\"bg-[#0d0d1a] border border-[#2a2a4a] rounded-xl overflow-hidden h-[calc(100vh-140px)] flex flex-col\">\n {/* Tab bar */}\n <div className=\"flex border-b border-[#2a2a4a] bg-[#0a0a15] shrink-0\">\n {(['chat', 'events', 'info'] as const).map(t => (\n <button key={t} onClick={() => setTab(t)}\n className={`px-5 py-3 text-sm font-medium border-b-2 transition-colors ${\n tab === t ? 'border-cyan-400 text-cyan-300' : 'border-transparent text-gray-500 hover:text-gray-300'\n }`}>\n {t === 'chat' ? '💬 Chat' : t === 'events' ? '📋 Events' : '📊 Info'}\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"flex-1 overflow-hidden\">\n {tab === 'chat' && (\n <TaskChatPanel alias={alias} onClose={() => {}} inline />\n )}\n\n {tab === 'events' && (\n <EventsTimeline events={events} loading={!eventsLoaded} />\n )}\n\n {tab === 'info' && (\n <div className=\"p-4 overflow-y-auto h-full space-y-4 max-w-2xl\">\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-3\">Node Info</h2>\n <div className=\"space-y-2 text-xs\">\n {[\n { label: 'Node ID', value: session?.node_id, alwaysShow: true },\n { label: 'Session ID', value: session?.session_id, alwaysShow: true },\n { label: 'Resume ID', value: session?.resume_id, alwaysShow: true },\n { label: 'Alias', value: session?.alias, alwaysShow: true },\n { label: 'Agent', value: session?.agent, alwaysShow: true },\n { label: 'Model', value: session?.model, alwaysShow: true },\n { label: 'Version', value: session?.version },\n { label: 'Server', value: session?.server, alwaysShow: true },\n { label: 'Hostname', value: session?.hostname, alwaysShow: true },\n { label: 'IP', value: session?.ip, alwaysShow: true },\n { label: 'Project', value: session?.project_dir },\n { label: 'Config', value: session?.config_path, alwaysShow: true },\n { label: 'Channels', value: session?.channels?.length ? (Array.isArray(session.channels) ? session.channels.join(', ') : session.channels) : null, alwaysShow: true },\n { label: 'Tmux', value: session?.tmux_name },\n { label: 'SSE', value: sse > 0 ? `Connected (${sse})` : 'Disconnected', alwaysShow: true },\n { label: 'Progress', value: session?.progress ? `${session.progress}%` : null },\n { label: 'Score', value: session?.score },\n { label: 'Last Seen', value: session?.last_seen_at, alwaysShow: true },\n { label: 'Registered', value: session?.registered_at, alwaysShow: true },\n { label: 'Updated', value: session?.updated_at, alwaysShow: true },\n ].map(({ label, value, alwaysShow }) => (value || alwaysShow) ? (\n <div key={label} className=\"flex justify-between gap-3\">\n <span className=\"text-gray-500 shrink-0\">{label}</span>\n <span className=\"text-gray-300 truncate max-w-[200px]\" title={value ? String(value) : '--'}>\n {value ? String(value) : '--'}\n </span>\n </div>\n ) : null)}\n </div>\n </div>\n\n {/* Current Task */}\n {session?.task && (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Current Task</h2>\n <p className=\"text-xs text-gray-400 whitespace-pre-wrap\">{session.task}</p>\n </div>\n )}\n\n {/* Output */}\n {session?.output && (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Last Output</h2>\n <p className=\"text-xs text-gray-400 whitespace-pre-wrap max-h-48 overflow-y-auto\">{session.output}</p>\n </div>\n )}\n\n {/* Send Task */}\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Send Task</h2>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={sendMsg}\n onChange={e => setSendMsg(e.target.value)}\n onKeyDown={e => e.key === 'Enter' && sendTask()}\n placeholder={`Send task to ${alias}...`}\n className=\"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-blue-500 focus:outline-none\"\n />\n <button\n onClick={sendTask}\n disabled={sending || !sendMsg.trim()}\n className=\"px-3 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-700 text-white text-xs rounded transition-colors\"\n >\n {sending ? '...' : 'Send'}\n </button>\n </div>\n {sendError && <div className=\"mt-2 text-xs text-red-400\">{sendError}</div>}\n </div>\n\n {/* Tmux Terminal */}\n {session?.tmux_name && (\n <TmuxViewer tmuxName={session.tmux_name} />\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nconst EVENT_COLORS: Record<string, { dot: string; line: string; icon: string }> = {\n delivered: { dot: 'bg-blue-400', line: 'bg-blue-500/30', icon: '📬' },\n acked: { dot: 'bg-yellow-400', line: 'bg-yellow-500/30', icon: '✅' },\n running: { dot: 'bg-green-400', line: 'bg-green-500/30', icon: '⚡' },\n replied: { dot: 'bg-purple-400', line: 'bg-purple-500/30', icon: '💬' },\n failed: { dot: 'bg-red-400', line: 'bg-red-500/30', icon: '❌' },\n created: { dot: 'bg-gray-400', line: 'bg-gray-500/30', icon: '📝' },\n};\n\nfunction EventsTimeline({ events, loading }: { events: Array<{ id: number; event_type: string; from_status: string; to_status: string; detail: string; created_at: string; task_id?: string }>; loading: boolean }) {\n if (loading) return <div className=\"flex justify-center py-8\"><div className=\"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin\" /></div>;\n if (events.length === 0) return <div className=\"text-center py-12 text-gray-600 text-xs\">No task events yet</div>;\n\n // Group by task_id\n const groups = new Map<string, typeof events>();\n events.forEach(e => {\n const key = (e as { task_id?: string }).task_id || `ungrouped-${e.id}`;\n const group = groups.get(key) || [];\n group.push(e);\n groups.set(key, group);\n });\n\n return (\n <div className=\"p-4 overflow-y-auto h-full space-y-4\">\n {[...groups.entries()].map(([taskId, taskEvents]) => (\n <div key={taskId} className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <div className=\"text-[10px] text-gray-600 mb-3 truncate\">Task: {taskId.slice(0, 20)}...</div>\n <div className=\"relative pl-6\">\n {/* Vertical line */}\n <div className=\"absolute left-[9px] top-2 bottom-2 w-0.5 bg-[#1a1a2a]\" />\n\n {taskEvents.map((e, i) => {\n const cfg = EVENT_COLORS[e.to_status] || EVENT_COLORS.created;\n return (\n <div key={e.id} className=\"relative pb-4 last:pb-0\">\n {/* Dot on line */}\n <div className={`absolute -left-6 top-0.5 w-[18px] h-[18px] rounded-full ${cfg.dot} flex items-center justify-center text-[9px] z-10 border-2 border-[#111128]`}>\n {cfg.icon.length <= 2 ? cfg.icon : ''}\n </div>\n {/* Content */}\n <div className=\"ml-2\">\n <div className=\"flex items-center gap-2\">\n <span className={`text-xs font-medium ${e.to_status === 'failed' ? 'text-red-400' : e.to_status === 'replied' ? 'text-purple-400' : 'text-gray-300'}`}>\n {e.event_type}\n </span>\n {e.from_status && (\n <span className=\"text-[10px] text-gray-600\">{e.from_status} → {e.to_status}</span>\n )}\n <span className=\"text-[10px] text-gray-600 ml-auto\">{timeAgo(e.created_at)}</span>\n </div>\n {e.detail && (\n <div className=\"text-[11px] text-gray-500 mt-0.5 truncate\">{e.detail.slice(0, 50)}{e.detail.length > 50 ? '...' : ''}</div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport default function NodePage() {\n return (\n <Suspense fallback={<div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono\">Loading...</div>}>\n <NodeDetailContent />\n </Suspense>\n );\n}\n"],"names":["timeAgo","dateStr","diff","Date","now","replace","getTime","s","Math","floor","statusColor","status","hasSse","formatUptime","seconds","h","m","TmuxViewer","tmuxName","output","setOutput","loading","setLoading","expanded","setExpanded","fetchTmux","res","fetch","encodeURIComponent","data","json","error","className","onClick","disabled","NodeDetailContent","searchParams","alias","get","session","setSession","inbox","setInbox","sse","setSse","setError","sendMsg","setSendMsg","sending","setSending","fetchData","e","Error","message","interval","setInterval","clearInterval","sendError","setSendError","sendTask","trim","method","headers","body","JSON","stringify","task","ok","setTimeout","href","NodeFullPanel","tab","setTab","events","setEvents","eventsLoaded","setEventsLoaded","then","r","d","catch","map","t","onClose","inline","EventsTimeline","label","value","node_id","alwaysShow","session_id","resume_id","agent","model","version","server","hostname","ip","project_dir","config_path","channels","length","Array","isArray","join","tmux_name","progress","score","last_seen_at","registered_at","updated_at","title","String","type","onChange","target","onKeyDown","key","placeholder","EVENT_COLORS","delivered","dot","line","icon","acked","running","replied","failed","created","groups","Map","forEach","task_id","id","group","push","set","entries","taskId","taskEvents","slice","i","cfg","to_status","event_type","from_status","created_at","detail","NodePage","fallback"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18150,e=>{"use strict";e.s(["formatUptime",0,function(e){let t=Math.floor(e/3600),s=Math.floor(e%3600/60);return t>0?`${t}h ${s}m`:`${s}m`},"timeAgo",0,function(e){if(!e)return"--";let t=Math.floor((Date.now()-new Date(e.replace(" ","T")+"Z").getTime())/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}])},16015,(e,t,s)=>{},98547,(e,t,s)=>{var a=e.i(47167);e.r(16015);var r=e.r(71645),n=r&&"object"==typeof r&&"default"in r?r:{default:r},i=void 0!==a.default&&a.default.env&&!0,l=function(e){return"[object String]"===Object.prototype.toString.call(e)},o=function(){function e(e){var t=void 0===e?{}:e,s=t.name,a=void 0===s?"stylesheet":s,r=t.optimizeForSpeed,n=void 0===r?i:r;d(l(a),"`name` must be a string"),this._name=a,this._deletedRulePlaceholder="#"+a+"-deleted-rule____{}",d("boolean"==typeof n,"`optimizeForSpeed` must be a boolean"),this._optimizeForSpeed=n,this._serverSheet=void 0,this._tags=[],this._injected=!1,this._rulesCount=0;var o="u">typeof window&&document.querySelector('meta[property="csp-nonce"]');this._nonce=o?o.getAttribute("content"):null}var t,s=e.prototype;return s.setOptimizeForSpeed=function(e){d("boolean"==typeof e,"`setOptimizeForSpeed` accepts a boolean"),d(0===this._rulesCount,"optimizeForSpeed cannot be when rules have already been inserted"),this.flush(),this._optimizeForSpeed=e,this.inject()},s.isOptimizeForSpeed=function(){return this._optimizeForSpeed},s.inject=function(){var e=this;if(d(!this._injected,"sheet already injected"),this._injected=!0,"u">typeof window&&this._optimizeForSpeed){this._tags[0]=this.makeStyleTag(this._name),this._optimizeForSpeed="insertRule"in this.getSheet(),this._optimizeForSpeed||(i||console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."),this.flush(),this._injected=!0);return}this._serverSheet={cssRules:[],insertRule:function(t,s){return"number"==typeof s?e._serverSheet.cssRules[s]={cssText:t}:e._serverSheet.cssRules.push({cssText:t}),s},deleteRule:function(t){e._serverSheet.cssRules[t]=null}}},s.getSheetForTag=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]},s.getSheet=function(){return this.getSheetForTag(this._tags[this._tags.length-1])},s.insertRule=function(e,t){if(d(l(e),"`insertRule` accepts only strings"),"u"<typeof window)return"number"!=typeof t&&(t=this._serverSheet.cssRules.length),this._serverSheet.insertRule(e,t),this._rulesCount++;if(this._optimizeForSpeed){var s=this.getSheet();"number"!=typeof t&&(t=s.cssRules.length);try{s.insertRule(e,t)}catch(t){return i||console.warn("StyleSheet: illegal rule: \n\n"+e+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),-1}}else{var a=this._tags[t];this._tags.push(this.makeStyleTag(this._name,e,a))}return this._rulesCount++},s.replaceRule=function(e,t){if(this._optimizeForSpeed||"u"<typeof window){var s="u">typeof window?this.getSheet():this._serverSheet;if(t.trim()||(t=this._deletedRulePlaceholder),!s.cssRules[e])return e;s.deleteRule(e);try{s.insertRule(t,e)}catch(a){i||console.warn("StyleSheet: illegal rule: \n\n"+t+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),s.insertRule(this._deletedRulePlaceholder,e)}}else{var a=this._tags[e];d(a,"old rule at index `"+e+"` not found"),a.textContent=t}return e},s.deleteRule=function(e){if("u"<typeof window)return void this._serverSheet.deleteRule(e);if(this._optimizeForSpeed)this.replaceRule(e,"");else{var t=this._tags[e];d(t,"rule at index `"+e+"` not found"),t.parentNode.removeChild(t),this._tags[e]=null}},s.flush=function(){this._injected=!1,this._rulesCount=0,"u">typeof window?(this._tags.forEach(function(e){return e&&e.parentNode.removeChild(e)}),this._tags=[]):this._serverSheet.cssRules=[]},s.cssRules=function(){var e=this;return"u"<typeof window?this._serverSheet.cssRules:this._tags.reduce(function(t,s){return s?t=t.concat(Array.prototype.map.call(e.getSheetForTag(s).cssRules,function(t){return t.cssText===e._deletedRulePlaceholder?null:t})):t.push(null),t},[])},s.makeStyleTag=function(e,t,s){t&&d(l(t),"makeStyleTag accepts only strings as second parameter");var a=document.createElement("style");this._nonce&&a.setAttribute("nonce",this._nonce),a.type="text/css",a.setAttribute("data-"+e,""),t&&a.appendChild(document.createTextNode(t));var r=document.head||document.getElementsByTagName("head")[0];return s?r.insertBefore(a,s):r.appendChild(a),a},t=[{key:"length",get:function(){return this._rulesCount}}],function(e,t){for(var s=0;s<t.length;s++){var a=t[s];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}(e.prototype,t),e}();function d(e,t){if(!e)throw Error("StyleSheet: "+t+".")}var c=function(e){for(var t=5381,s=e.length;s;)t=33*t^e.charCodeAt(--s);return t>>>0},u={};function h(e,t){if(!t)return"jsx-"+e;var s=String(t),a=e+s;return u[a]||(u[a]="jsx-"+c(e+"-"+s)),u[a]}function x(e,t){"u"<typeof window&&(t=t.replace(/\/style/gi,"\\/style"));var s=e+t;return u[s]||(u[s]=t.replace(/__jsx-style-dynamic-selector/g,e)),u[s]}var m=function(){function e(e){var t=void 0===e?{}:e,s=t.styleSheet,a=void 0===s?null:s,r=t.optimizeForSpeed,n=void 0!==r&&r;this._sheet=a||new o({name:"styled-jsx",optimizeForSpeed:n}),this._sheet.inject(),a&&"boolean"==typeof n&&(this._sheet.setOptimizeForSpeed(n),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),this._fromServer=void 0,this._indices={},this._instancesCounts={}}var t=e.prototype;return t.add=function(e){var t=this;void 0===this._optimizeForSpeed&&(this._optimizeForSpeed=Array.isArray(e.children),this._sheet.setOptimizeForSpeed(this._optimizeForSpeed),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),"u">typeof window&&!this._fromServer&&(this._fromServer=this.selectFromServer(),this._instancesCounts=Object.keys(this._fromServer).reduce(function(e,t){return e[t]=0,e},{}));var s=this.getIdAndRules(e),a=s.styleId,r=s.rules;if(a in this._instancesCounts){this._instancesCounts[a]+=1;return}var n=r.map(function(e){return t._sheet.insertRule(e)}).filter(function(e){return -1!==e});this._indices[a]=n,this._instancesCounts[a]=1},t.remove=function(e){var t=this,s=this.getIdAndRules(e).styleId;if(function(e,t){if(!e)throw Error("StyleSheetRegistry: "+t+".")}(s in this._instancesCounts,"styleId: `"+s+"` not found"),this._instancesCounts[s]-=1,this._instancesCounts[s]<1){var a=this._fromServer&&this._fromServer[s];a?(a.parentNode.removeChild(a),delete this._fromServer[s]):(this._indices[s].forEach(function(e){return t._sheet.deleteRule(e)}),delete this._indices[s]),delete this._instancesCounts[s]}},t.update=function(e,t){this.add(t),this.remove(e)},t.flush=function(){this._sheet.flush(),this._sheet.inject(),this._fromServer=void 0,this._indices={},this._instancesCounts={}},t.cssRules=function(){var e=this,t=this._fromServer?Object.keys(this._fromServer).map(function(t){return[t,e._fromServer[t]]}):[],s=this._sheet.cssRules();return t.concat(Object.keys(this._indices).map(function(t){return[t,e._indices[t].map(function(e){return s[e].cssText}).join(e._optimizeForSpeed?"":"\n")]}).filter(function(e){return!!e[1]}))},t.styles=function(e){var t,s;return t=this.cssRules(),void 0===(s=e)&&(s={}),t.map(function(e){var t=e[0],a=e[1];return n.default.createElement("style",{id:"__"+t,key:"__"+t,nonce:s.nonce?s.nonce:void 0,dangerouslySetInnerHTML:{__html:a}})})},t.getIdAndRules=function(e){var t=e.children,s=e.dynamic,a=e.id;if(s){var r=h(a,s);return{styleId:r,rules:Array.isArray(t)?t.map(function(e){return x(r,e)}):[x(r,t)]}}return{styleId:h(a),rules:Array.isArray(t)?t:[t]}},t.selectFromServer=function(){return Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')).reduce(function(e,t){return e[t.id.slice(2)]=t,e},{})},e}(),p=r.createContext(null);function f(){return new m}function g(){return r.useContext(p)}p.displayName="StyleSheetContext";var b=n.default.useInsertionEffect||n.default.useLayoutEffect,y="u">typeof window?f():void 0;function v(e){var t=y||g();return t&&("u"<typeof window?t.add(e):b(function(){return t.add(e),function(){t.remove(e)}},[e.id,String(e.dynamic)])),null}v.dynamic=function(e){return e.map(function(e){return h(e[0],e[1])}).join(" ")},s.StyleRegistry=function(e){var t=e.registry,s=e.children,a=r.useContext(p),i=r.useState(function(){return a||t||f()})[0];return n.default.createElement(p.Provider,{value:i},s)},s.createStyleRegistry=f,s.style=v,s.useStyleRegistry=g},21373,(e,t,s)=>{t.exports=e.r(98547).style},58442,e=>{"use strict";var t=e.i(43476),s=e.i(21373),a=e.i(71645),r=e.i(18150);let n=["created","delivered","running","replied"],i={created:"bg-gray-400",delivered:"bg-blue-400",running:"bg-green-400",replied:"bg-purple-400",failed:"bg-red-400",closed:"bg-gray-500"};function l({status:e}){let s=n.indexOf(e),a="failed"===e;return(0,t.jsxs)("div",{className:"flex items-center gap-1 mt-1.5",children:[n.map((e,r)=>(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsx)("div",{className:`w-2 h-2 rounded-full transition-all duration-700 ${a?0===r?"bg-red-400":"bg-gray-700":r<=s?i[e]||"bg-gray-600":"bg-gray-700"}`}),r<n.length-1&&(0,t.jsx)("div",{className:`w-4 h-px transition-colors duration-700 ${a?"bg-red-800":r<s?"bg-gray-500":"bg-gray-800"}`})]},e)),(0,t.jsx)("span",{className:`text-[10px] ml-1.5 font-medium ${a?"text-red-400":"replied"===e?"text-purple-400":"running"===e?"text-green-400":"text-gray-500"}`,children:e}),("running"===e||"delivered"===e)&&(0,t.jsxs)("span",{className:"ml-1",children:[(0,t.jsx)("span",{className:"inline-block w-1 h-1 rounded-full bg-green-400 animate-pulse"}),(0,t.jsx)("span",{className:"inline-block w-1 h-1 rounded-full bg-green-400 animate-pulse ml-0.5",style:{animationDelay:"0.2s"}}),(0,t.jsx)("span",{className:"inline-block w-1 h-1 rounded-full bg-green-400 animate-pulse ml-0.5",style:{animationDelay:"0.4s"}})]})]})}function o({text:e}){if(!e)return(0,t.jsx)("span",{className:"text-gray-600 italic",children:"No content"});let s=e.split(/(```[\s\S]*?```|`[^`\n]+`|\*\*[^*]+\*\*)/g);return(0,t.jsx)("div",{className:"whitespace-pre-wrap break-words leading-relaxed",children:s.map((e,s)=>{if(e.startsWith("```")&&e.endsWith("```")){let a=e.slice(3,-3),r=a.match(/^(\w+)\n/)?.[1]||"",n=r?a.slice(r.length+1):a;return(0,t.jsxs)("div",{className:"my-2 rounded-lg overflow-hidden border border-[#1a1a2a]",children:[r&&(0,t.jsx)("div",{className:"bg-[#0a0a15] px-3 py-1 text-[10px] text-gray-500 border-b border-[#1a1a2a]",children:r}),(0,t.jsx)("pre",{className:"bg-[#050510] px-3 py-2 text-[11px] text-green-300 overflow-x-auto",children:n})]},s)}return e.startsWith("`")&&e.endsWith("`")?(0,t.jsx)("code",{className:"bg-[#0a0a15] rounded px-1.5 py-0.5 text-cyan-300 text-[11px] border border-[#1a1a2a]",children:e.slice(1,-1)},s):e.startsWith("**")&&e.endsWith("**")?(0,t.jsx)("strong",{className:"text-white font-semibold",children:e.slice(2,-2)},s):(0,t.jsx)("span",{children:e},s)})})}e.s(["TaskChatPanel",0,function({alias:e,onClose:n,inline:i,availableNodes:d}){let[c,u]=(0,a.useState)([]),[h,x]=(0,a.useState)(""),[m,p]=(0,a.useState)("normal"),[f,g]=(0,a.useState)(!1),[b,y]=(0,a.useState)(new Set),[v,j]=(0,a.useState)(!1),[w,S]=(0,a.useState)(e),[_,N]=(0,a.useState)(!1),[k,C]=(0,a.useState)(""),[R,T]=(0,a.useState)([]),z=(0,a.useRef)(null),F=(0,a.useRef)(null);(0,a.useEffect)(()=>{d?T(d):fetch("/api/hub/status").then(e=>e.json()).then(e=>{T((e.sessions||[]).filter(e=>"offline"!==e.status).map(e=>e.alias))}).catch(()=>{})},[d]),(0,a.useEffect)(()=>{S(e)},[e]);let $=(0,a.useCallback)(async()=>{try{let t=await fetch(`/api/hub/tasks?to_name=${encodeURIComponent(e)}&limit=30`),s=await t.json();s.tasks&&u(s.tasks.reverse())}catch{}finally{j(!0)}},[e]);(0,a.useEffect)(()=>{u([]),j(!1),$(),setTimeout(()=>F.current?.focus(),300)},[e,$]),(0,a.useEffect)(()=>{z.current?.scrollIntoView({behavior:"smooth"})},[c]),(0,a.useEffect)(()=>{if(0===b.size)return;let e=Date.now(),t=setInterval(async()=>{if(Date.now()-e>12e4){y(new Set),clearInterval(t);return}for(let e of b)try{let t=await fetch(`/api/hub/tasks?task_id=${encodeURIComponent(e)}`),s=await t.json();if(s.tasks?.[0]){let t=s.tasks[0];u(s=>s.map(s=>s.task_id===e?{...s,...t}:s)),["replied","failed","closed","expired","cancelled"].includes(t.status)&&y(t=>{let s=new Set(t);return s.delete(e),s})}}catch{}},2e3);return()=>clearInterval(t)},[b]);let E=async()=>{if(!h.trim()||f)return;let e=h.trim(),t=w,s=e.match(/^@(\S+)\s+([\s\S]+)/);if(s){let a=R.find(e=>e.toLowerCase()===s[1].toLowerCase());a&&(t=a,e=s[2])}g(!0),x(""),N(!1),F.current&&(F.current.style.height="auto");let a=`tmp-${Date.now()}`,r={task_id:a,from_name:"Dashboard",to_name:t,status:"created",priority:m,content:e,result:"",created_at:new Date().toISOString()};u(e=>[...e,r]);try{let s=await fetch("/api/hub/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({alias:t,task:e,priority:m})}),r=await s.json().catch(()=>({ok:!1,error:`HTTP ${s.status}`}));if(r.ok&&r.message_id)u(e=>e.map(e=>e.task_id===a?{...e,task_id:r.message_id,status:"delivered"}:e)),y(e=>new Set(e).add(r.message_id));else{let e=r.error||r.detail||`send failed (status ${s.status})`;u(t=>t.map(t=>t.task_id===a?{...t,status:"failed",result:`❌ ${e}`}:t))}}catch(t){let e=t instanceof Error?t.message:String(t);u(t=>t.map(t=>t.task_id===a?{...t,status:"failed",result:`❌ network error: ${e}`}:t))}g(!1),F.current?.focus()},I=R.filter(t=>t!==e&&t.toLowerCase().includes(k)).slice(0,8),A=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto px-4 py-4 space-y-4",children:[!v&&(0,t.jsx)("div",{className:"flex justify-center py-8",children:(0,t.jsx)("div",{className:"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin"})}),v&&0===c.length&&(0,t.jsxs)("div",{className:"text-center py-12",children:[(0,t.jsx)("div",{className:"text-3xl mb-3",children:"💬"}),(0,t.jsx)("div",{className:"text-gray-500 text-sm",children:"Start a conversation"}),(0,t.jsxs)("div",{className:"text-gray-600 text-xs mt-1",children:["Send a task to ",e]})]}),c.map((e,s)=>(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsxs)("div",{className:"max-w-[85%] bg-cyan-500/8 border border-cyan-500/15 rounded-2xl rounded-br-md px-4 py-2.5 shadow-sm",children:[(0,t.jsx)("div",{className:"text-[13px] text-gray-200",children:(0,t.jsx)(o,{text:e.content})}),(0,t.jsxs)("div",{className:"flex items-center justify-between mt-1.5 gap-3",children:[(0,t.jsx)(l,{status:e.status}),(0,t.jsx)("span",{className:"text-[9px] text-gray-600 shrink-0",children:(0,r.timeAgo)(e.created_at)})]})]})}),e.result&&(0,t.jsx)("div",{className:"flex justify-start",children:(0,t.jsxs)("div",{className:"max-w-[85%] bg-green-500/8 border border-green-500/15 rounded-2xl rounded-bl-md px-4 py-2.5 shadow-sm",children:[(0,t.jsx)("div",{className:"text-[10px] text-green-400 font-medium mb-1.5",children:e.to_name}),(0,t.jsx)("div",{className:"text-[13px] text-gray-200",children:(0,t.jsx)(o,{text:e.result})})]})}),"running"===e.status&&!e.result&&(0,t.jsx)("div",{className:"flex justify-start",children:(0,t.jsx)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-2xl rounded-bl-md px-4 py-3",children:(0,t.jsxs)("div",{className:"flex gap-1",children:[(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-gray-500 animate-bounce",style:{animationDelay:"0s"}}),(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-gray-500 animate-bounce",style:{animationDelay:"0.15s"}}),(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-gray-500 animate-bounce",style:{animationDelay:"0.3s"}})]})})})]},e.task_id)),(0,t.jsx)("div",{ref:z})]}),(0,t.jsxs)("div",{className:"border-t border-[#2a2a4a] bg-[#0d0d1a] px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex items-end gap-2",children:[(0,t.jsxs)("div",{className:"flex-1 relative",children:[_&&I.length>0&&(0,t.jsx)("div",{className:"absolute bottom-full left-0 right-0 mb-1 bg-[#111128] border border-[#2a2a4a] rounded-lg shadow-xl shadow-black/50 overflow-hidden z-10 max-h-48 overflow-y-auto",children:I.map(e=>(0,t.jsxs)("button",{onClick:()=>{let t,s;return t=h.lastIndexOf("@"),s=h.slice(0,t),void(x(`${s}@${e} `),N(!1),F.current?.focus())},className:"w-full flex items-center gap-2 px-3 py-2 text-xs text-left hover:bg-cyan-500/10 transition-colors",children:[(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-cyan-400 shrink-0"}),(0,t.jsx)("span",{className:"text-gray-300",children:e})]},e))}),(0,t.jsx)("textarea",{ref:F,value:h,onChange:e=>{var t;(e=>{x(e);let t=e.lastIndexOf("@");if(t>=0&&(0===t||" "===e[t-1]||"\n"===e[t-1])){let s=e.slice(t+1);if(!s.includes(" ")&&!s.includes("\n")){C(s.toLowerCase()),N(!0);return}}N(!1)})(e.target.value),(t=e.target).style.height="auto",t.style.height=Math.min(t.scrollHeight,150)+"px"},onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),E()),"Escape"===e.key&&N(!1)},placeholder:`Message ${e}...`,rows:1,className:"w-full bg-[#111128] border border-[#2a2a4a] rounded-xl px-4 py-2.5 pr-16 text-sm text-white placeholder-gray-600 focus:border-cyan-500/40 focus:outline-none resize-none transition-colors"}),(0,t.jsx)("div",{className:"absolute right-2 bottom-1.5 flex items-center gap-1",children:(0,t.jsxs)("select",{value:m,onChange:e=>p(e.target.value),className:"bg-transparent text-[9px] text-gray-600 focus:outline-none cursor-pointer",children:[(0,t.jsx)("option",{value:"normal",children:"N"}),(0,t.jsx)("option",{value:"high",children:"H"}),(0,t.jsx)("option",{value:"low",children:"L"})]})})]}),(0,t.jsx)("button",{onClick:E,disabled:f||!h.trim(),className:"p-2.5 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white rounded-xl transition-all shrink-0 active:scale-95",children:f?(0,t.jsx)("div",{className:"w-5 h-5 border-2 border-white/30 border-t-white rounded-full animate-spin"}):(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5"})})})]}),(0,t.jsxs)("div",{className:"flex justify-between text-[9px] text-gray-700 mt-1.5",children:[(0,t.jsx)("span",{children:h.includes("@")?`Sending to: ${w}`:"Type @ to mention another node"}),(0,t.jsx)("span",{children:"Enter to send · Shift+Enter for newline"})]})]})]});return i?(0,t.jsx)("div",{className:"flex flex-col h-full",children:A}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{onClick:n,className:"jsx-c3e56cbc81656d9 fixed inset-0 bg-black/30 z-40 lg:hidden"}),(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9 fixed top-0 right-0 h-full w-full lg:w-[500px] bg-[#0a0a1a] border-l border-[#2a2a4a] z-50 flex flex-col shadow-2xl shadow-black/60 animate-slide-in",children:[(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9 flex items-center justify-between px-4 py-3 border-b border-[#2a2a4a] bg-[#0d0d1a]",children:[(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9 flex items-center gap-3",children:[(0,t.jsx)("div",{className:"jsx-c3e56cbc81656d9 w-8 h-8 rounded-full bg-gradient-to-br from-cyan-500/30 to-blue-500/30 flex items-center justify-center text-xs font-bold text-cyan-300",children:e.slice(0,2)}),(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9",children:[(0,t.jsx)("div",{className:"jsx-c3e56cbc81656d9 text-sm font-semibold text-white",children:e}),(0,t.jsx)("div",{className:"jsx-c3e56cbc81656d9 text-[10px] text-gray-500",children:b.size>0?"Processing...":"Ready"})]})]}),(0,t.jsx)("button",{onClick:n,className:"jsx-c3e56cbc81656d9 text-gray-500 hover:text-white p-1.5 rounded-lg hover:bg-[#1a1a2a]",children:(0,t.jsx)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,className:"jsx-c3e56cbc81656d9 w-5 h-5",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12",className:"jsx-c3e56cbc81656d9"})})})]}),A]}),(0,t.jsx)(s.default,{id:"c3e56cbc81656d9",children:"@keyframes slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.animate-slide-in{animation:.2s ease-out slide-in}"})]})}])},53136,e=>{"use strict";var t=e.i(43476),s=e.i(71645),a=e.i(18566),r=e.i(22016),n=e.i(58442),i=e.i(18150);function l({tmuxName:e}){let[a,r]=(0,s.useState)(""),[n,i]=(0,s.useState)(!1),[o,d]=(0,s.useState)(!1),c=async()=>{i(!0);try{let t=await fetch(`/api/hub/tmux?name=${encodeURIComponent(e)}`),s=await t.json();r(s.output||s.error||"No output")}catch{r("Failed to fetch")}i(!1)};return(0,t.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,t.jsxs)("h2",{className:"text-sm font-semibold text-gray-300",children:["Terminal (",e,")"]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("button",{onClick:c,disabled:n,className:"text-xs text-cyan-400 hover:text-cyan-300 disabled:text-gray-600",children:n?"Loading...":"Capture"}),a&&(0,t.jsx)("button",{onClick:()=>d(!o),className:"text-xs text-gray-500 hover:text-gray-300",children:o?"Collapse":"Expand"})]})]}),a&&(0,t.jsx)("pre",{className:`text-[11px] text-green-300 bg-[#050510] rounded-lg px-3 py-2 border border-[#1a1a2a] overflow-x-auto whitespace-pre font-mono ${o?"max-h-96":"max-h-32"} overflow-y-auto`,children:a}),!a&&(0,t.jsx)("p",{className:"text-xs text-gray-600",children:"Click Capture to view terminal output"})]})}function o(){let e=(0,a.useSearchParams)().get("alias")||"",[n,i]=(0,s.useState)(null),[l,o]=(0,s.useState)([]),[c,u]=(0,s.useState)(0),[h,x]=(0,s.useState)(""),[m,p]=(0,s.useState)(""),[f,g]=(0,s.useState)(!1),b=(0,s.useCallback)(async()=>{if(e)try{let t=await fetch(`/api/hub/session?alias=${encodeURIComponent(e)}`),s=await t.json();s.session&&i(s.session),s.inbox&&o(s.inbox),u(s.sse||0),x("")}catch(e){x(e instanceof Error?e.message:"fetch failed")}},[e]);(0,s.useEffect)(()=>{b();let e=setInterval(b,5e3);return()=>clearInterval(e)},[b]);let[y,v]=(0,s.useState)(""),j=async()=>{if(m.trim()&&e){g(!0),v("");try{let t=await fetch("/api/hub/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({alias:e,task:m})}),s=await t.json();s.ok?(p(""),setTimeout(b,2e3)):v(s.error||"Send failed")}catch(e){v(e instanceof Error?e.message:"Send failed")}g(!1)}};if(!e)return(0,t.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono flex items-center justify-center",children:(0,t.jsxs)("p",{className:"text-gray-500",children:["No alias specified. ",(0,t.jsx)(r.default,{href:"/",className:"text-blue-400 hover:underline",children:"Back to dashboard"})]})});let w=n?.status==="working"?"text-green-400":n?.status==="idle"?"text-blue-400":"text-gray-500";return(0,t.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,t.jsxs)("div",{className:"flex items-center gap-4 mb-6",children:[(0,t.jsx)(r.default,{href:"/nodes",className:"text-gray-500 hover:text-gray-300 text-sm lg:ml-0 ml-10",children:"← Nodes"}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:`inline-block w-3 h-3 rounded-full ${c>0?n?.status==="working"?"bg-green-500 animate-pulse":"bg-emerald-400":"bg-gray-500"}`}),(0,t.jsx)("h1",{className:"text-2xl font-bold text-white",children:e}),(0,t.jsx)("span",{className:`text-sm ${w}`,children:n?.status||"unknown"})]})]}),h&&(0,t.jsx)("div",{className:"bg-red-900/20 border border-red-800/40 text-red-300 px-4 py-2 rounded-lg mb-6 text-sm",children:h}),(0,t.jsx)(d,{alias:e,session:n,sse:c,sendMsg:m,setSendMsg:p,sending:f,sendTask:j,sendError:y})]})}function d({alias:e,session:a,sse:r,sendMsg:i,setSendMsg:o,sending:c,sendTask:h,sendError:x}){let[m,p]=(0,s.useState)("chat"),[f,g]=(0,s.useState)([]),[b,y]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{"events"!==m||b||fetch("/api/hub/task-events?limit=50").then(e=>e.json()).then(e=>{g(e.events||[]),y(!0)}).catch(()=>y(!0))},[m,b]),(0,t.jsxs)("div",{className:"bg-[#0d0d1a] border border-[#2a2a4a] rounded-xl overflow-hidden h-[calc(100vh-140px)] flex flex-col",children:[(0,t.jsx)("div",{className:"flex border-b border-[#2a2a4a] bg-[#0a0a15] shrink-0",children:["chat","events","info"].map(e=>(0,t.jsx)("button",{onClick:()=>p(e),className:`px-5 py-3 text-sm font-medium border-b-2 transition-colors ${m===e?"border-cyan-400 text-cyan-300":"border-transparent text-gray-500 hover:text-gray-300"}`,children:"chat"===e?"💬 Chat":"events"===e?"📋 Events":"📊 Info"},e))}),(0,t.jsxs)("div",{className:"flex-1 overflow-hidden",children:["chat"===m&&(0,t.jsx)(n.TaskChatPanel,{alias:e,onClose:()=>{},inline:!0}),"events"===m&&(0,t.jsx)(u,{events:f,loading:!b}),"info"===m&&(0,t.jsxs)("div",{className:"p-4 overflow-y-auto h-full space-y-4 max-w-2xl",children:[(0,t.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Node Info"}),(0,t.jsx)("div",{className:"space-y-2 text-xs",children:[{label:"Node ID",value:a?.node_id,alwaysShow:!0},{label:"Session ID",value:a?.session_id,alwaysShow:!0},{label:"Resume ID",value:a?.resume_id,alwaysShow:!0},{label:"Alias",value:a?.alias,alwaysShow:!0},{label:"Agent",value:a?.agent,alwaysShow:!0},{label:"Model",value:a?.model,alwaysShow:!0},{label:"Version",value:a?.version},{label:"Server",value:a?.server,alwaysShow:!0},{label:"Hostname",value:a?.hostname,alwaysShow:!0},{label:"IP",value:a?.ip,alwaysShow:!0},{label:"Project",value:a?.project_dir},{label:"Config",value:a?.config_path,alwaysShow:!0},{label:"Channels",value:a?.channels?.length?Array.isArray(a.channels)?a.channels.join(", "):a.channels:null,alwaysShow:!0},{label:"Tmux",value:a?.tmux_name},{label:"SSE",value:r>0?`Connected (${r})`:"Disconnected",alwaysShow:!0},{label:"Progress",value:a?.progress?`${a.progress}%`:null},{label:"Score",value:a?.score},{label:"Last Seen",value:a?.last_seen_at,alwaysShow:!0},{label:"Registered",value:a?.registered_at,alwaysShow:!0},{label:"Updated",value:a?.updated_at,alwaysShow:!0}].map(({label:e,value:s,alwaysShow:a})=>s||a?(0,t.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,t.jsx)("span",{className:"text-gray-500 shrink-0",children:e}),(0,t.jsx)("span",{className:"text-gray-300 truncate max-w-[200px]",title:s?String(s):"--",children:s?String(s):"--"})]},e):null)})]}),a?.task&&(0,t.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Current Task"}),(0,t.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap",children:a.task})]}),a?.output&&(0,t.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Last Output"}),(0,t.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap max-h-48 overflow-y-auto",children:a.output})]}),(0,t.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,t.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Send Task"}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("input",{type:"text",value:i,onChange:e=>o(e.target.value),onKeyDown:e=>"Enter"===e.key&&h(),placeholder:`Send task to ${e}...`,className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-blue-500 focus:outline-none"}),(0,t.jsx)("button",{onClick:h,disabled:c||!i.trim(),className:"px-3 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-700 text-white text-xs rounded transition-colors",children:c?"...":"Send"})]}),x&&(0,t.jsx)("div",{className:"mt-2 text-xs text-red-400",children:x})]}),a?.tmux_name&&(0,t.jsx)(l,{tmuxName:a.tmux_name})]})]})]})}let c={delivered:{dot:"bg-blue-400",line:"bg-blue-500/30",icon:"📬"},acked:{dot:"bg-yellow-400",line:"bg-yellow-500/30",icon:"✅"},running:{dot:"bg-green-400",line:"bg-green-500/30",icon:"⚡"},replied:{dot:"bg-purple-400",line:"bg-purple-500/30",icon:"💬"},failed:{dot:"bg-red-400",line:"bg-red-500/30",icon:"❌"},created:{dot:"bg-gray-400",line:"bg-gray-500/30",icon:"📝"}};function u({events:e,loading:s}){if(s)return(0,t.jsx)("div",{className:"flex justify-center py-8",children:(0,t.jsx)("div",{className:"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin"})});if(0===e.length)return(0,t.jsx)("div",{className:"text-center py-12 text-gray-600 text-xs",children:"No task events yet"});let a=new Map;return e.forEach(e=>{let t=e.task_id||`ungrouped-${e.id}`,s=a.get(t)||[];s.push(e),a.set(t,s)}),(0,t.jsx)("div",{className:"p-4 overflow-y-auto h-full space-y-4",children:[...a.entries()].map(([e,s])=>(0,t.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,t.jsxs)("div",{className:"text-[10px] text-gray-600 mb-3 truncate",children:["Task: ",e.slice(0,20),"..."]}),(0,t.jsxs)("div",{className:"relative pl-6",children:[(0,t.jsx)("div",{className:"absolute left-[9px] top-2 bottom-2 w-0.5 bg-[#1a1a2a]"}),s.map((e,s)=>{let a=c[e.to_status]||c.created;return(0,t.jsxs)("div",{className:"relative pb-4 last:pb-0",children:[(0,t.jsx)("div",{className:`absolute -left-6 top-0.5 w-[18px] h-[18px] rounded-full ${a.dot} flex items-center justify-center text-[9px] z-10 border-2 border-[#111128]`,children:a.icon.length<=2?a.icon:""}),(0,t.jsxs)("div",{className:"ml-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:`text-xs font-medium ${"failed"===e.to_status?"text-red-400":"replied"===e.to_status?"text-purple-400":"text-gray-300"}`,children:e.event_type}),e.from_status&&(0,t.jsxs)("span",{className:"text-[10px] text-gray-600",children:[e.from_status," → ",e.to_status]}),(0,t.jsx)("span",{className:"text-[10px] text-gray-600 ml-auto",children:(0,i.timeAgo)(e.created_at)})]}),e.detail&&(0,t.jsxs)("div",{className:"text-[11px] text-gray-500 mt-0.5 truncate",children:[e.detail.slice(0,50),e.detail.length>50?"...":""]})]})]},e.id)})]})]},e))})}e.s(["default",0,function(){return(0,t.jsx)(s.Suspense,{fallback:(0,t.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono",children:"Loading..."}),children:(0,t.jsx)(o,{})})}])}]);
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.geist_mono_8d43a2aa-module__8Li5zG__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.geist_mono_8d43a2aa-module__8Li5zG__variable{--font-geist-mono:"Geist Mono", "Geist Mono Fallback"}
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:var(--font-geist-mono);--color-red-300:#ffa3a3;--color-red-400:#ff6568;--color-red-500:#fb2c36;--color-red-600:#e40014;--color-red-800:#9f0712;--color-red-900:#82181a;--color-orange-300:#ffb96d;--color-orange-400:#ff8b1a;--color-orange-500:#fe6e00;--color-yellow-200:#fff085;--color-yellow-300:#ffe02a;--color-yellow-400:#fac800;--color-yellow-500:#edb200;--color-yellow-800:#874b00;--color-yellow-900:#733e0a;--color-green-300:#7bf1a8;--color-green-400:#05df72;--color-green-500:#00c758;--color-green-600:#00a544;--color-green-800:#016630;--color-green-900:#0d542b;--color-emerald-400:#00d294;--color-cyan-300:#53eafd;--color-cyan-400:#00d2ef;--color-cyan-500:#00b7d7;--color-cyan-600:#0092b5;--color-cyan-800:#005f78;--color-cyan-900:#104e64;--color-cyan-950:#053345;--color-blue-300:#90c5ff;--color-blue-400:#54a2ff;--color-blue-500:#3080ff;--color-blue-600:#155dfc;--color-blue-800:#193cb8;--color-blue-900:#1c398e;--color-purple-200:#e9d5ff;--color-purple-300:#d9b3ff;--color-purple-400:#c07eff;--color-purple-500:#ac4bff;--color-purple-600:#9810fa;--color-gray-100:#f3f4f6;--color-gray-200:#e5e7eb;--color-gray-300:#d1d5dc;--color-gray-400:#99a1af;--color-gray-500:#6a7282;--color-gray-600:#4a5565;--color-gray-700:#364153;--color-gray-800:#1e2939;--color-gray-900:#101828;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-geist-mono)}@supports (color:lab(0% 0 0)){:root,:host{--color-red-300:lab(76.5514% 36.422 15.5335);--color-red-400:lab(63.7053% 60.745 31.3109);--color-red-500:lab(55.4814% 75.0732 48.8528);--color-red-600:lab(48.4493% 77.4328 61.5452);--color-red-800:lab(33.7174% 55.8993 41.0293);--color-red-900:lab(28.5139% 44.5539 29.0463);--color-orange-300:lab(80.8059% 21.7313 50.4455);--color-orange-400:lab(70.0429% 42.5156 75.8207);--color-orange-500:lab(64.272% 57.1788 90.3583);--color-yellow-200:lab(94.3433% -5.00429 52.9663);--color-yellow-300:lab(89.7033% -.480294 84.4917);--color-yellow-400:lab(83.2664% 8.65132 106.895);--color-yellow-500:lab(76.3898% 14.5258 98.4589);--color-yellow-800:lab(38.7484% 23.5833 51.4916);--color-yellow-900:lab(32.3865% 21.1273 38.5959);--color-green-300:lab(86.9953% -47.2691 25.0054);--color-green-400:lab(78.503% -64.9265 39.7492);--color-green-500:lab(70.5521% -66.5147 45.8073);--color-green-600:lab(59.0978% -58.6621 41.2579);--color-green-800:lab(37.4616% -36.7971 22.9692);--color-green-900:lab(30.797% -29.6927 17.382);--color-emerald-400:lab(75.0771% -60.7313 19.4147);--color-cyan-300:lab(85.3886% -36.7636 -21.5716);--color-cyan-400:lab(76.6045% -40.9406 -29.6231);--color-cyan-500:lab(67.805% -35.3952 -30.2018);--color-cyan-600:lab(55.1767% -26.7496 -30.5139);--color-cyan-800:lab(36.5114% -17.1989 -21.6292);--color-cyan-900:lab(30.372% -13.1853 -18.7887);--color-cyan-950:lab(19.1528% -9.68757 -15.5267);--color-blue-300:lab(77.5052% -6.4629 -36.42);--color-blue-400:lab(65.0361% -1.42065 -56.9802);--color-blue-500:lab(54.1736% 13.3369 -74.6839);--color-blue-600:lab(44.0605% 29.0279 -86.0352);--color-blue-800:lab(30.2514% 27.7853 -70.2699);--color-blue-900:lab(26.1542% 15.7545 -51.5504);--color-purple-200:lab(87.8405% 13.4282 -18.7159);--color-purple-300:lab(78.3298% 26.2195 -34.9499);--color-purple-400:lab(63.6946% 47.6127 -59.2066);--color-purple-500:lab(52.0183% 66.11 -78.2316);--color-purple-600:lab(43.0295% 75.21 -86.5669);--color-gray-100:lab(96.1596% -.0823438 -1.13575);--color-gray-200:lab(91.6229% -.159115 -2.26791);--color-gray-300:lab(85.1236% -.612259 -3.7138);--color-gray-400:lab(65.9269% -.832707 -8.17473);--color-gray-500:lab(47.7841% -.393182 -10.0268);--color-gray-600:lab(35.6337% -1.58697 -10.8425);--color-gray-700:lab(27.1134% -.956401 -12.3224);--color-gray-800:lab(16.1051% -1.18239 -11.7533);--color-gray-900:lab(8.11897% .811279 -12.254)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-4{inset:calc(var(--spacing) * 4)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\/4{top:25%}.top-2{top:calc(var(--spacing) * 2)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-1\.5{bottom:calc(var(--spacing) * 1.5)}.bottom-1\/4{bottom:25%}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-full{bottom:100%}.-left-6{left:calc(var(--spacing) * -6)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-1\/3{left:33.3333%}.left-3{left:calc(var(--spacing) * 3)}.left-\[9px\]{left:9px}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-4{grid-column:span 4/span 4}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-10{margin-left:calc(var(--spacing) * 10)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-64{height:calc(var(--spacing) * 64)}.h-\[18px\]{height:18px}.h-\[60px\]{height:60px}.h-\[400px\]{height:400px}.h-\[600px\]{height:600px}.h-\[calc\(100vh-140px\)\]{height:calc(100vh - 140px)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[200px\]{max-height:200px}.min-h-\[120px\]{min-height:120px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-64{width:calc(var(--spacing) * 64)}.w-\[18px\]{width:18px}.w-\[72px\]{width:72px}.w-\[400px\]{width:400px}.w-\[600px\]{width:600px}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[80px\]{max-width:80px}.max-w-\[85\%\]{max-width:85%}.max-w-\[200px\]{max-width:200px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.rotate-\[-20deg\]{rotate:-20deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-bounce{animation:var(--animate-bounce)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.scroll-mt-8{scroll-margin-top:calc(var(--spacing) * 8)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-br-md{border-bottom-right-radius:var(--radius-md)}.rounded-bl-md{border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-\[\#1a1a2a\]{border-color:#1a1a2a}.border-\[\#2a2a4a\]{border-color:#2a2a4a}.border-\[\#111128\]{border-color:#111128}.border-blue-500\/15{border-color:#3080ff26}@supports (color:color-mix(in lab, red, red)){.border-blue-500\/15{border-color:color-mix(in oklab, var(--color-blue-500) 15%, transparent)}}.border-blue-500\/20{border-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.border-blue-500\/20{border-color:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.border-blue-800\/30{border-color:#193cb84d}@supports (color:color-mix(in lab, red, red)){.border-blue-800\/30{border-color:color-mix(in oklab, var(--color-blue-800) 30%, transparent)}}.border-current{border-color:currentColor}.border-cyan-400{border-color:var(--color-cyan-400)}.border-cyan-500\/15{border-color:#00b7d726}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/15{border-color:color-mix(in oklab, var(--color-cyan-500) 15%, transparent)}}.border-cyan-500\/20{border-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/20{border-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.border-cyan-500\/30{border-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.border-cyan-500\/30{border-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.border-cyan-800\/30{border-color:#005f784d}@supports (color:color-mix(in lab, red, red)){.border-cyan-800\/30{border-color:color-mix(in oklab, var(--color-cyan-800) 30%, transparent)}}.border-gray-500\/15{border-color:#6a728226}@supports (color:color-mix(in lab, red, red)){.border-gray-500\/15{border-color:color-mix(in oklab, var(--color-gray-500) 15%, transparent)}}.border-gray-500\/20{border-color:#6a728233}@supports (color:color-mix(in lab, red, red)){.border-gray-500\/20{border-color:color-mix(in oklab, var(--color-gray-500) 20%, transparent)}}.border-gray-600\/20{border-color:#4a556533}@supports (color:color-mix(in lab, red, red)){.border-gray-600\/20{border-color:color-mix(in oklab, var(--color-gray-600) 20%, transparent)}}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-700\/30{border-color:#3641534d}@supports (color:color-mix(in lab, red, red)){.border-gray-700\/30{border-color:color-mix(in oklab, var(--color-gray-700) 30%, transparent)}}.border-gray-700\/50{border-color:#36415380}@supports (color:color-mix(in lab, red, red)){.border-gray-700\/50{border-color:color-mix(in oklab, var(--color-gray-700) 50%, transparent)}}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-800\/30{border-color:#1e29394d}@supports (color:color-mix(in lab, red, red)){.border-gray-800\/30{border-color:color-mix(in oklab, var(--color-gray-800) 30%, transparent)}}.border-gray-800\/40{border-color:#1e293966}@supports (color:color-mix(in lab, red, red)){.border-gray-800\/40{border-color:color-mix(in oklab, var(--color-gray-800) 40%, transparent)}}.border-green-500\/15{border-color:#00c75826}@supports (color:color-mix(in lab, red, red)){.border-green-500\/15{border-color:color-mix(in oklab, var(--color-green-500) 15%, transparent)}}.border-green-500\/20{border-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.border-green-500\/20{border-color:color-mix(in oklab, var(--color-green-500) 20%, transparent)}}.border-green-800\/30{border-color:#0166304d}@supports (color:color-mix(in lab, red, red)){.border-green-800\/30{border-color:color-mix(in oklab, var(--color-green-800) 30%, transparent)}}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab, red, red)){.border-orange-500\/20{border-color:color-mix(in oklab, var(--color-orange-500) 20%, transparent)}}.border-purple-500\/15{border-color:#ac4bff26}@supports (color:color-mix(in lab, red, red)){.border-purple-500\/15{border-color:color-mix(in oklab, var(--color-purple-500) 15%, transparent)}}.border-purple-500\/20{border-color:#ac4bff33}@supports (color:color-mix(in lab, red, red)){.border-purple-500\/20{border-color:color-mix(in oklab, var(--color-purple-500) 20%, transparent)}}.border-red-500\/10{border-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.border-red-500\/10{border-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\/20{border-color:color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.border-red-800\/30{border-color:#9f07124d}@supports (color:color-mix(in lab, red, red)){.border-red-800\/30{border-color:color-mix(in oklab, var(--color-red-800) 30%, transparent)}}.border-red-800\/40{border-color:#9f071266}@supports (color:color-mix(in lab, red, red)){.border-red-800\/40{border-color:color-mix(in oklab, var(--color-red-800) 40%, transparent)}}.border-red-900\/30{border-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.border-red-900\/30{border-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.border-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\/10{border-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.border-white\/30{border-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.border-yellow-500\/20{border-color:#edb20033}@supports (color:color-mix(in lab, red, red)){.border-yellow-500\/20{border-color:color-mix(in oklab, var(--color-yellow-500) 20%, transparent)}}.border-yellow-800\/30{border-color:#874b004d}@supports (color:color-mix(in lab, red, red)){.border-yellow-800\/30{border-color:color-mix(in oklab, var(--color-yellow-800) 30%, transparent)}}.border-yellow-800\/40{border-color:#874b0066}@supports (color:color-mix(in lab, red, red)){.border-yellow-800\/40{border-color:color-mix(in oklab, var(--color-yellow-800) 40%, transparent)}}.border-t-cyan-500{border-top-color:var(--color-cyan-500)}.border-t-white{border-top-color:var(--color-white)}.bg-\[\#0a0a1a\]{background-color:#0a0a1a}.bg-\[\#0a0a15\]{background-color:#0a0a15}.bg-\[\#0d0d1a\]{background-color:#0d0d1a}.bg-\[\#1a1a2a\]{background-color:#1a1a2a}.bg-\[\#2a2a4a\]{background-color:#2a2a4a}.bg-\[\#050510\]{background-color:#050510}.bg-\[\#080814\]{background-color:#080814}.bg-\[\#111128\]{background-color:#111128}.bg-\[\#111128\]\/80{background-color:#111128cc;background-color:lab(5.91834% 5.33491 -15.6886/.8)}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab, red, red)){.bg-black\/20{background-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/5{background-color:#3080ff0d}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/5{background-color:color-mix(in oklab, var(--color-blue-500) 5%, transparent)}}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/10{background-color:color-mix(in oklab, var(--color-blue-500) 10%, transparent)}}.bg-blue-500\/30{background-color:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\/30{background-color:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-900\/30{background-color:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.bg-blue-900\/30{background-color:color-mix(in oklab, var(--color-blue-900) 30%, transparent)}}.bg-cyan-400{background-color:var(--color-cyan-400)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/5{background-color:#00b7d70d}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/5{background-color:color-mix(in oklab, var(--color-cyan-500) 5%, transparent)}}.bg-cyan-500\/8{background-color:#00b7d714}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/8{background-color:color-mix(in oklab, var(--color-cyan-500) 8%, transparent)}}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/10{background-color:color-mix(in oklab, var(--color-cyan-500) 10%, transparent)}}.bg-cyan-500\/20{background-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/20{background-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.bg-cyan-500\/40{background-color:#00b7d766}@supports (color:color-mix(in lab, red, red)){.bg-cyan-500\/40{background-color:color-mix(in oklab, var(--color-cyan-500) 40%, transparent)}}.bg-cyan-600{background-color:var(--color-cyan-600)}.bg-cyan-900\/30{background-color:#104e644d}@supports (color:color-mix(in lab, red, red)){.bg-cyan-900\/30{background-color:color-mix(in oklab, var(--color-cyan-900) 30%, transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-500\/5{background-color:#6a72820d}@supports (color:color-mix(in lab, red, red)){.bg-gray-500\/5{background-color:color-mix(in oklab, var(--color-gray-500) 5%, transparent)}}.bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab, red, red)){.bg-gray-500\/10{background-color:color-mix(in oklab, var(--color-gray-500) 10%, transparent)}}.bg-gray-500\/30{background-color:#6a72824d}@supports (color:color-mix(in lab, red, red)){.bg-gray-500\/30{background-color:color-mix(in oklab, var(--color-gray-500) 30%, transparent)}}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/20{background-color:#1e293933}@supports (color:color-mix(in lab, red, red)){.bg-gray-800\/20{background-color:color-mix(in oklab, var(--color-gray-800) 20%, transparent)}}.bg-gray-800\/40{background-color:#1e293966}@supports (color:color-mix(in lab, red, red)){.bg-gray-800\/40{background-color:color-mix(in oklab, var(--color-gray-800) 40%, transparent)}}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab, red, red)){.bg-gray-800\/50{background-color:color-mix(in oklab, var(--color-gray-800) 50%, transparent)}}.bg-gray-800\/60{background-color:#1e293999}@supports (color:color-mix(in lab, red, red)){.bg-gray-800\/60{background-color:color-mix(in oklab, var(--color-gray-800) 60%, transparent)}}.bg-gray-900\/30{background-color:#1018284d}@supports (color:color-mix(in lab, red, red)){.bg-gray-900\/30{background-color:color-mix(in oklab, var(--color-gray-900) 30%, transparent)}}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/5{background-color:#00c7580d}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/5{background-color:color-mix(in oklab, var(--color-green-500) 5%, transparent)}}.bg-green-500\/8{background-color:#00c75814}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/8{background-color:color-mix(in oklab, var(--color-green-500) 8%, transparent)}}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/10{background-color:color-mix(in oklab, var(--color-green-500) 10%, transparent)}}.bg-green-500\/30{background-color:#00c7584d}@supports (color:color-mix(in lab, red, red)){.bg-green-500\/30{background-color:color-mix(in oklab, var(--color-green-500) 30%, transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab, red, red)){.bg-green-900\/30{background-color:color-mix(in oklab, var(--color-green-900) 30%, transparent)}}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab, red, red)){.bg-orange-500\/10{background-color:color-mix(in oklab, var(--color-orange-500) 10%, transparent)}}.bg-purple-400{background-color:var(--color-purple-400)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab, red, red)){.bg-purple-500\/10{background-color:color-mix(in oklab, var(--color-purple-500) 10%, transparent)}}.bg-purple-500\/30{background-color:#ac4bff4d}@supports (color:color-mix(in lab, red, red)){.bg-purple-500\/30{background-color:color-mix(in oklab, var(--color-purple-500) 30%, transparent)}}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/5{background-color:color-mix(in oklab, var(--color-red-500) 5%, transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/10{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.bg-red-500\/30{background-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/30{background-color:color-mix(in oklab, var(--color-red-500) 30%, transparent)}}.bg-red-600\/20{background-color:#e4001433}@supports (color:color-mix(in lab, red, red)){.bg-red-600\/20{background-color:color-mix(in oklab, var(--color-red-600) 20%, transparent)}}.bg-red-800{background-color:var(--color-red-800)}.bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/20{background-color:color-mix(in oklab, var(--color-red-900) 20%, transparent)}}.bg-red-900\/30{background-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/30{background-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.bg-transparent{background-color:#0000}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/5{background-color:#edb2000d}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/5{background-color:color-mix(in oklab, var(--color-yellow-500) 5%, transparent)}}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/10{background-color:color-mix(in oklab, var(--color-yellow-500) 10%, transparent)}}.bg-yellow-500\/30{background-color:#edb2004d}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\/30{background-color:color-mix(in oklab, var(--color-yellow-500) 30%, transparent)}}.bg-yellow-900\/20{background-color:#733e0a33}@supports (color:color-mix(in lab, red, red)){.bg-yellow-900\/20{background-color:color-mix(in oklab, var(--color-yellow-900) 20%, transparent)}}.bg-yellow-900\/30{background-color:#733e0a4d}@supports (color:color-mix(in lab, red, red)){.bg-yellow-900\/30{background-color:color-mix(in oklab, var(--color-yellow-900) 30%, transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-500\/15{--tw-gradient-from:#3080ff26}@supports (color:color-mix(in lab, red, red)){.from-blue-500\/15{--tw-gradient-from:color-mix(in oklab, var(--color-blue-500) 15%, transparent)}}.from-blue-500\/15{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-500{--tw-gradient-from:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-500\/20{--tw-gradient-from:#00b7d733}@supports (color:color-mix(in lab, red, red)){.from-cyan-500\/20{--tw-gradient-from:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.from-cyan-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-500\/30{--tw-gradient-from:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.from-cyan-500\/30{--tw-gradient-from:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.from-cyan-500\/30{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-600{--tw-gradient-from:var(--color-cyan-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-gray-500\/10{--tw-gradient-from:#6a72821a}@supports (color:color-mix(in lab, red, red)){.from-gray-500\/10{--tw-gradient-from:color-mix(in oklab, var(--color-gray-500) 10%, transparent)}}.from-gray-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-green-500\/20{--tw-gradient-from:#00c75833}@supports (color:color-mix(in lab, red, red)){.from-green-500\/20{--tw-gradient-from:color-mix(in oklab, var(--color-green-500) 20%, transparent)}}.from-green-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-cyan-400\/70{--tw-gradient-via:#00d2efb3}@supports (color:color-mix(in lab, red, red)){.via-cyan-400\/70{--tw-gradient-via:color-mix(in oklab, var(--color-cyan-400) 70%, transparent)}}.via-cyan-400\/70{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-blue-500\/0{--tw-gradient-to:#0000}@supports (color:color-mix(in lab, red, red)){.to-blue-500\/0{--tw-gradient-to:color-mix(in oklab, var(--color-blue-500) 0%, transparent)}}.to-blue-500\/0{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-500\/20{--tw-gradient-to:#3080ff33}@supports (color:color-mix(in lab, red, red)){.to-blue-500\/20{--tw-gradient-to:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.to-blue-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-500\/30{--tw-gradient-to:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.to-blue-500\/30{--tw-gradient-to:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.to-blue-500\/30{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-600{--tw-gradient-to:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-cyan-500\/0{--tw-gradient-to:#0000}@supports (color:color-mix(in lab, red, red)){.to-cyan-500\/0{--tw-gradient-to:color-mix(in oklab, var(--color-cyan-500) 0%, transparent)}}.to-cyan-500\/0{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-gray-500\/0{--tw-gradient-to:#0000}@supports (color:color-mix(in lab, red, red)){.to-gray-500\/0{--tw-gradient-to:color-mix(in oklab, var(--color-gray-500) 0%, transparent)}}.to-gray-500\/0{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-green-500\/0{--tw-gradient-to:#0000}@supports (color:color-mix(in lab, red, red)){.to-green-500\/0{--tw-gradient-to:color-mix(in oklab, var(--color-green-500) 0%, transparent)}}.to-green-500\/0{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-16{padding-right:calc(var(--spacing) * 16)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-geist-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.35em\]{--tw-tracking:.35em;letter-spacing:.35em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-400{color:var(--color-cyan-400)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-400\/80{color:#05df72cc}@supports (color:color-mix(in lab, red, red)){.text-green-400\/80{color:color-mix(in oklab, var(--color-green-400) 80%, transparent)}}.text-green-500{color:var(--color-green-500)}.text-orange-300{color:var(--color-orange-300)}.text-orange-400{color:var(--color-orange-400)}.text-purple-200{color:var(--color-purple-200)}.text-purple-200\/80{color:#e9d5ffcc}@supports (color:color-mix(in lab, red, red)){.text-purple-200\/80{color:color-mix(in oklab, var(--color-purple-200) 80%, transparent)}}.text-purple-300{color:var(--color-purple-300)}.text-purple-400{color:var(--color-purple-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-white{color:var(--color-white)}.text-white\/10{color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.text-white\/10{color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.text-yellow-200{color:var(--color-yellow-200)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-gray-600::placeholder{color:var(--color-gray-600)}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-black\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/30{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.shadow-black\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/50{--tw-shadow-color:#00000080}@supports (color:color-mix(in lab, red, red)){.shadow-black\/50{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/60{--tw-shadow-color:#0009}@supports (color:color-mix(in lab, red, red)){.shadow-black\/60{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 60%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/70{--tw-shadow-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.shadow-black\/70{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 70%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-cyan-500\/5{--tw-shadow-color:#00b7d70d}@supports (color:color-mix(in lab, red, red)){.shadow-cyan-500\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-500) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-cyan-500\/10{--tw-shadow-color:#00b7d71a}@supports (color:color-mix(in lab, red, red)){.shadow-cyan-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-cyan-950\/30{--tw-shadow-color:#0533454d}@supports (color:color-mix(in lab, red, red)){.shadow-cyan-950\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-950) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-green-500\/10{--tw-shadow-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.shadow-green-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-green-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[100px\]{--tw-blur:blur(100px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[120px\]{--tw-blur:blur(120px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.select-all{-webkit-user-select:all;user-select:all}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing) * 0)}@media (hover:hover){.hover\:border-\[\#3a3a5a\]:hover{border-color:#3a3a5a}.hover\:border-cyan-500\/30:hover{border-color:#00b7d74d}@supports (color:color-mix(in lab, red, red)){.hover\:border-cyan-500\/30:hover{border-color:color-mix(in oklab, var(--color-cyan-500) 30%, transparent)}}.hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.hover\:bg-\[\#1a1a2a\]:hover{background-color:#1a1a2a}.hover\:bg-\[\#161630\]:hover{background-color:#161630}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-cyan-500:hover{background-color:var(--color-cyan-500)}.hover\:bg-cyan-500\/10:hover{background-color:#00b7d71a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-cyan-500\/10:hover{background-color:color-mix(in oklab, var(--color-cyan-500) 10%, transparent)}}.hover\:bg-cyan-500\/20:hover{background-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.hover\:bg-cyan-500\/20:hover{background-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.hover\:bg-green-500:hover{background-color:var(--color-green-500)}.hover\:bg-green-500\/20:hover{background-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.hover\:bg-green-500\/20:hover{background-color:color-mix(in oklab, var(--color-green-500) 20%, transparent)}}.hover\:bg-orange-500\/10:hover{background-color:#fe6e001a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-orange-500\/10:hover{background-color:color-mix(in oklab, var(--color-orange-500) 10%, transparent)}}.hover\:bg-purple-500:hover{background-color:var(--color-purple-500)}.hover\:bg-red-500\/5:hover{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-500\/5:hover{background-color:color-mix(in oklab, var(--color-red-500) 5%, transparent)}}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.hover\:bg-red-600\/30:hover{background-color:#e400144d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-red-600\/30:hover{background-color:color-mix(in oklab, var(--color-red-600) 30%, transparent)}}.hover\:from-cyan-500:hover{--tw-gradient-from:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:to-blue-500:hover{--tw-gradient-to:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:text-cyan-300:hover{color:var(--color-cyan-300)}.hover\:text-gray-200:hover{color:var(--color-gray-200)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-orange-300:hover{color:var(--color-orange-300)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-cyan-500\/20:hover{--tw-shadow-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-cyan-500\/20:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-500) 20%, transparent) var(--tw-shadow-alpha), transparent)}}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-blue-500\/50:focus{border-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.focus\:border-blue-500\/50:focus{border-color:color-mix(in oklab, var(--color-blue-500) 50%, transparent)}}.focus\:border-cyan-500:focus{border-color:var(--color-cyan-500)}.focus\:border-cyan-500\/40:focus{border-color:#00b7d766}@supports (color:color-mix(in lab, red, red)){.focus\:border-cyan-500\/40:focus{border-color:color-mix(in oklab, var(--color-cyan-500) 40%, transparent)}}.focus\:border-cyan-500\/50:focus{border-color:#00b7d780}@supports (color:color-mix(in lab, red, red)){.focus\:border-cyan-500\/50:focus{border-color:color-mix(in oklab, var(--color-cyan-500) 50%, transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-500\/20:focus{--tw-ring-color:#3080ff33}@supports (color:color-mix(in lab, red, red)){.focus\:ring-blue-500\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.focus\:ring-cyan-500\/20:focus{--tw-ring-color:#00b7d733}@supports (color:color-mix(in lab, red, red)){.focus\:ring-cyan-500\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-cyan-500) 20%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:bg-\[\#1a1a3a\]:active{background-color:#1a1a3a}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-700:disabled{background-color:var(--color-gray-700)}.disabled\:bg-gray-800:disabled{background-color:var(--color-gray-800)}.disabled\:from-gray-800:disabled{--tw-gradient-from:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.disabled\:to-gray-800:disabled{--tw-gradient-to:var(--color-gray-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.disabled\:text-gray-600:disabled{color:var(--color-gray-600)}.disabled\:shadow-none:disabled{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (min-width:40rem){.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:w-72{width:calc(var(--spacing) * 72)}.sm\:max-w-\[320px\]{max-width:320px}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing) * 4)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:px-8{padding-inline:calc(var(--spacing) * 8)}.sm\:text-right{text-align:right}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:static{position:static}.lg\:inset-x-\[15\%\]{inset-inline:15%}.lg\:inset-y-\[5\%\]{inset-block:5%}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:ml-0{margin-left:calc(var(--spacing) * 0)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:max-h-none{max-height:none}.lg\:w-\[280px\]{width:280px}.lg\:w-\[500px\]{width:500px}.lg\:shrink-0{flex-shrink:0}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:96rem){.\32 xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}:root{--background:#0a0a1a;--foreground:#e5e7eb}body{background:var(--background);color:var(--foreground);font-family:var(--font-mono), ui-monospace, monospace}.scrollbar-thin::-webkit-scrollbar{width:4px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}.scrollbar-thin::-webkit-scrollbar-thumb{background:#2a2a4a;border-radius:4px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background:#3a3a5a}@keyframes fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:.3s ease-out fade-in}@media (max-width:640px){select,input[type=text],button{min-height:44px}}@supports (padding-bottom:env(safe-area-inset-bottom)){body{padding-bottom:env(safe-area-inset-bottom)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18150,e=>{"use strict";e.s(["formatUptime",0,function(e){let t=Math.floor(e/3600),s=Math.floor(e%3600/60);return t>0?`${t}h ${s}m`:`${s}m`},"timeAgo",0,function(e){if(!e)return"--";let t=Math.floor((Date.now()-new Date(e.replace(" ","T")+"Z").getTime())/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}])},65822,e=>{"use strict";var t=e.i(83599),s=e.i(58963);let r=async e=>{let t=await fetch(e);if(401===t.status)throw window.location.assign("/login"),Error("unauthorized");return t.json()},n={refreshInterval:5e3,dedupingInterval:3e3};function i(e,t){if(!t)return e;let s=e.includes("?")?"&":"?";return`${e}${s}network_id=${encodeURIComponent(t)}`}e.s(["useAnetConfig",0,function(){let{data:e}=(0,t.default)("/api/anet/config",r,{refreshInterval:3e4});return{config:e||null}},"useHealth",0,function(){let{data:e,error:s}=(0,t.default)("/api/hub/health",r,n);return{health:e||null,error:s}},"useLicense",0,function(){let{data:e,error:s}=(0,t.default)("/api/hub/license",r,{refreshInterval:6e4});return{license:e?.ok?e:null,error:s}},"useMessages",0,function(e=100){let{networkId:a}=(0,s.useNetworkId)(),{data:l,error:o,isLoading:c}=(0,t.default)(i(`/api/hub/messages?limit=${e}`,a),r,n);return{messages:l?.messages||[],error:o,isLoading:c}},"useSessions",0,function(){let{networkId:e}=(0,s.useNetworkId)(),{data:a,error:l,isLoading:o}=(0,t.default)(i("/api/hub/status",e),r,n);return{sessions:a?.sessions||[],hint:a?._hint,error:l,isLoading:o}},"useStats",0,function(){let{networkId:e}=(0,s.useNetworkId)(),{data:a,error:l}=(0,t.default)(i("/api/hub/stats",e),r,n);return{stats:a?.ok?a:null,error:l}},"useTasks",0,function(e){let{networkId:a}=(0,s.useNetworkId)(),l=new URLSearchParams({limit:"100",...e}).toString(),{data:o,error:c,isLoading:d}=(0,t.default)(i(`/api/hub/tasks?${l}`,a),r,n);return{tasks:o?.tasks||[],count:o?.count??0,source:o?.source,error:c,isLoading:d}}])},16015,(e,t,s)=>{},98547,(e,t,s)=>{var r=e.i(47167);e.r(16015);var n=e.r(71645),i=n&&"object"==typeof n&&"default"in n?n:{default:n},a=void 0!==r.default&&r.default.env&&!0,l=function(e){return"[object String]"===Object.prototype.toString.call(e)},o=function(){function e(e){var t=void 0===e?{}:e,s=t.name,r=void 0===s?"stylesheet":s,n=t.optimizeForSpeed,i=void 0===n?a:n;c(l(r),"`name` must be a string"),this._name=r,this._deletedRulePlaceholder="#"+r+"-deleted-rule____{}",c("boolean"==typeof i,"`optimizeForSpeed` must be a boolean"),this._optimizeForSpeed=i,this._serverSheet=void 0,this._tags=[],this._injected=!1,this._rulesCount=0;var o="u">typeof window&&document.querySelector('meta[property="csp-nonce"]');this._nonce=o?o.getAttribute("content"):null}var t,s=e.prototype;return s.setOptimizeForSpeed=function(e){c("boolean"==typeof e,"`setOptimizeForSpeed` accepts a boolean"),c(0===this._rulesCount,"optimizeForSpeed cannot be when rules have already been inserted"),this.flush(),this._optimizeForSpeed=e,this.inject()},s.isOptimizeForSpeed=function(){return this._optimizeForSpeed},s.inject=function(){var e=this;if(c(!this._injected,"sheet already injected"),this._injected=!0,"u">typeof window&&this._optimizeForSpeed){this._tags[0]=this.makeStyleTag(this._name),this._optimizeForSpeed="insertRule"in this.getSheet(),this._optimizeForSpeed||(a||console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."),this.flush(),this._injected=!0);return}this._serverSheet={cssRules:[],insertRule:function(t,s){return"number"==typeof s?e._serverSheet.cssRules[s]={cssText:t}:e._serverSheet.cssRules.push({cssText:t}),s},deleteRule:function(t){e._serverSheet.cssRules[t]=null}}},s.getSheetForTag=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]},s.getSheet=function(){return this.getSheetForTag(this._tags[this._tags.length-1])},s.insertRule=function(e,t){if(c(l(e),"`insertRule` accepts only strings"),"u"<typeof window)return"number"!=typeof t&&(t=this._serverSheet.cssRules.length),this._serverSheet.insertRule(e,t),this._rulesCount++;if(this._optimizeForSpeed){var s=this.getSheet();"number"!=typeof t&&(t=s.cssRules.length);try{s.insertRule(e,t)}catch(t){return a||console.warn("StyleSheet: illegal rule: \n\n"+e+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),-1}}else{var r=this._tags[t];this._tags.push(this.makeStyleTag(this._name,e,r))}return this._rulesCount++},s.replaceRule=function(e,t){if(this._optimizeForSpeed||"u"<typeof window){var s="u">typeof window?this.getSheet():this._serverSheet;if(t.trim()||(t=this._deletedRulePlaceholder),!s.cssRules[e])return e;s.deleteRule(e);try{s.insertRule(t,e)}catch(r){a||console.warn("StyleSheet: illegal rule: \n\n"+t+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),s.insertRule(this._deletedRulePlaceholder,e)}}else{var r=this._tags[e];c(r,"old rule at index `"+e+"` not found"),r.textContent=t}return e},s.deleteRule=function(e){if("u"<typeof window)return void this._serverSheet.deleteRule(e);if(this._optimizeForSpeed)this.replaceRule(e,"");else{var t=this._tags[e];c(t,"rule at index `"+e+"` not found"),t.parentNode.removeChild(t),this._tags[e]=null}},s.flush=function(){this._injected=!1,this._rulesCount=0,"u">typeof window?(this._tags.forEach(function(e){return e&&e.parentNode.removeChild(e)}),this._tags=[]):this._serverSheet.cssRules=[]},s.cssRules=function(){var e=this;return"u"<typeof window?this._serverSheet.cssRules:this._tags.reduce(function(t,s){return s?t=t.concat(Array.prototype.map.call(e.getSheetForTag(s).cssRules,function(t){return t.cssText===e._deletedRulePlaceholder?null:t})):t.push(null),t},[])},s.makeStyleTag=function(e,t,s){t&&c(l(t),"makeStyleTag accepts only strings as second parameter");var r=document.createElement("style");this._nonce&&r.setAttribute("nonce",this._nonce),r.type="text/css",r.setAttribute("data-"+e,""),t&&r.appendChild(document.createTextNode(t));var n=document.head||document.getElementsByTagName("head")[0];return s?n.insertBefore(r,s):n.appendChild(r),r},t=[{key:"length",get:function(){return this._rulesCount}}],function(e,t){for(var s=0;s<t.length;s++){var r=t[s];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(e.prototype,t),e}();function c(e,t){if(!e)throw Error("StyleSheet: "+t+".")}var d=function(e){for(var t=5381,s=e.length;s;)t=33*t^e.charCodeAt(--s);return t>>>0},u={};function h(e,t){if(!t)return"jsx-"+e;var s=String(t),r=e+s;return u[r]||(u[r]="jsx-"+d(e+"-"+s)),u[r]}function f(e,t){"u"<typeof window&&(t=t.replace(/\/style/gi,"\\/style"));var s=e+t;return u[s]||(u[s]=t.replace(/__jsx-style-dynamic-selector/g,e)),u[s]}var m=function(){function e(e){var t=void 0===e?{}:e,s=t.styleSheet,r=void 0===s?null:s,n=t.optimizeForSpeed,i=void 0!==n&&n;this._sheet=r||new o({name:"styled-jsx",optimizeForSpeed:i}),this._sheet.inject(),r&&"boolean"==typeof i&&(this._sheet.setOptimizeForSpeed(i),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),this._fromServer=void 0,this._indices={},this._instancesCounts={}}var t=e.prototype;return t.add=function(e){var t=this;void 0===this._optimizeForSpeed&&(this._optimizeForSpeed=Array.isArray(e.children),this._sheet.setOptimizeForSpeed(this._optimizeForSpeed),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),"u">typeof window&&!this._fromServer&&(this._fromServer=this.selectFromServer(),this._instancesCounts=Object.keys(this._fromServer).reduce(function(e,t){return e[t]=0,e},{}));var s=this.getIdAndRules(e),r=s.styleId,n=s.rules;if(r in this._instancesCounts){this._instancesCounts[r]+=1;return}var i=n.map(function(e){return t._sheet.insertRule(e)}).filter(function(e){return -1!==e});this._indices[r]=i,this._instancesCounts[r]=1},t.remove=function(e){var t=this,s=this.getIdAndRules(e).styleId;if(function(e,t){if(!e)throw Error("StyleSheetRegistry: "+t+".")}(s in this._instancesCounts,"styleId: `"+s+"` not found"),this._instancesCounts[s]-=1,this._instancesCounts[s]<1){var r=this._fromServer&&this._fromServer[s];r?(r.parentNode.removeChild(r),delete this._fromServer[s]):(this._indices[s].forEach(function(e){return t._sheet.deleteRule(e)}),delete this._indices[s]),delete this._instancesCounts[s]}},t.update=function(e,t){this.add(t),this.remove(e)},t.flush=function(){this._sheet.flush(),this._sheet.inject(),this._fromServer=void 0,this._indices={},this._instancesCounts={}},t.cssRules=function(){var e=this,t=this._fromServer?Object.keys(this._fromServer).map(function(t){return[t,e._fromServer[t]]}):[],s=this._sheet.cssRules();return t.concat(Object.keys(this._indices).map(function(t){return[t,e._indices[t].map(function(e){return s[e].cssText}).join(e._optimizeForSpeed?"":"\n")]}).filter(function(e){return!!e[1]}))},t.styles=function(e){var t,s;return t=this.cssRules(),void 0===(s=e)&&(s={}),t.map(function(e){var t=e[0],r=e[1];return i.default.createElement("style",{id:"__"+t,key:"__"+t,nonce:s.nonce?s.nonce:void 0,dangerouslySetInnerHTML:{__html:r}})})},t.getIdAndRules=function(e){var t=e.children,s=e.dynamic,r=e.id;if(s){var n=h(r,s);return{styleId:n,rules:Array.isArray(t)?t.map(function(e){return f(n,e)}):[f(n,t)]}}return{styleId:h(r),rules:Array.isArray(t)?t:[t]}},t.selectFromServer=function(){return Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')).reduce(function(e,t){return e[t.id.slice(2)]=t,e},{})},e}(),p=n.createContext(null);function x(){return new m}function g(){return n.useContext(p)}p.displayName="StyleSheetContext";var y=i.default.useInsertionEffect||i.default.useLayoutEffect,v="u">typeof window?x():void 0;function b(e){var t=v||g();return t&&("u"<typeof window?t.add(e):y(function(){return t.add(e),function(){t.remove(e)}},[e.id,String(e.dynamic)])),null}b.dynamic=function(e){return e.map(function(e){return h(e[0],e[1])}).join(" ")},s.StyleRegistry=function(e){var t=e.registry,s=e.children,r=n.useContext(p),a=n.useState(function(){return r||t||x()})[0];return i.default.createElement(p.Provider,{value:a},s)},s.createStyleRegistry=x,s.style=b,s.useStyleRegistry=g},21373,(e,t,s)=>{t.exports=e.r(98547).style},58442,e=>{"use strict";var t=e.i(43476),s=e.i(21373),r=e.i(71645),n=e.i(18150);let i=["created","delivered","running","replied"],a={created:"bg-gray-400",delivered:"bg-blue-400",running:"bg-green-400",replied:"bg-purple-400",failed:"bg-red-400",closed:"bg-gray-500"};function l({status:e}){let s=i.indexOf(e),r="failed"===e;return(0,t.jsxs)("div",{className:"flex items-center gap-1 mt-1.5",children:[i.map((e,n)=>(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsx)("div",{className:`w-2 h-2 rounded-full transition-all duration-700 ${r?0===n?"bg-red-400":"bg-gray-700":n<=s?a[e]||"bg-gray-600":"bg-gray-700"}`}),n<i.length-1&&(0,t.jsx)("div",{className:`w-4 h-px transition-colors duration-700 ${r?"bg-red-800":n<s?"bg-gray-500":"bg-gray-800"}`})]},e)),(0,t.jsx)("span",{className:`text-[10px] ml-1.5 font-medium ${r?"text-red-400":"replied"===e?"text-purple-400":"running"===e?"text-green-400":"text-gray-500"}`,children:e}),("running"===e||"delivered"===e)&&(0,t.jsxs)("span",{className:"ml-1",children:[(0,t.jsx)("span",{className:"inline-block w-1 h-1 rounded-full bg-green-400 animate-pulse"}),(0,t.jsx)("span",{className:"inline-block w-1 h-1 rounded-full bg-green-400 animate-pulse ml-0.5",style:{animationDelay:"0.2s"}}),(0,t.jsx)("span",{className:"inline-block w-1 h-1 rounded-full bg-green-400 animate-pulse ml-0.5",style:{animationDelay:"0.4s"}})]})]})}function o({text:e}){if(!e)return(0,t.jsx)("span",{className:"text-gray-600 italic",children:"No content"});let s=e.split(/(```[\s\S]*?```|`[^`\n]+`|\*\*[^*]+\*\*)/g);return(0,t.jsx)("div",{className:"whitespace-pre-wrap break-words leading-relaxed",children:s.map((e,s)=>{if(e.startsWith("```")&&e.endsWith("```")){let r=e.slice(3,-3),n=r.match(/^(\w+)\n/)?.[1]||"",i=n?r.slice(n.length+1):r;return(0,t.jsxs)("div",{className:"my-2 rounded-lg overflow-hidden border border-[#1a1a2a]",children:[n&&(0,t.jsx)("div",{className:"bg-[#0a0a15] px-3 py-1 text-[10px] text-gray-500 border-b border-[#1a1a2a]",children:n}),(0,t.jsx)("pre",{className:"bg-[#050510] px-3 py-2 text-[11px] text-green-300 overflow-x-auto",children:i})]},s)}return e.startsWith("`")&&e.endsWith("`")?(0,t.jsx)("code",{className:"bg-[#0a0a15] rounded px-1.5 py-0.5 text-cyan-300 text-[11px] border border-[#1a1a2a]",children:e.slice(1,-1)},s):e.startsWith("**")&&e.endsWith("**")?(0,t.jsx)("strong",{className:"text-white font-semibold",children:e.slice(2,-2)},s):(0,t.jsx)("span",{children:e},s)})})}e.s(["TaskChatPanel",0,function({alias:e,onClose:i,inline:a,availableNodes:c}){let[d,u]=(0,r.useState)([]),[h,f]=(0,r.useState)(""),[m,p]=(0,r.useState)("normal"),[x,g]=(0,r.useState)(!1),[y,v]=(0,r.useState)(new Set),[b,j]=(0,r.useState)(!1),[_,S]=(0,r.useState)(e),[w,N]=(0,r.useState)(!1),[k,R]=(0,r.useState)(""),[C,z]=(0,r.useState)([]),F=(0,r.useRef)(null),I=(0,r.useRef)(null);(0,r.useEffect)(()=>{c?z(c):fetch("/api/hub/status").then(e=>e.json()).then(e=>{z((e.sessions||[]).filter(e=>"offline"!==e.status).map(e=>e.alias))}).catch(()=>{})},[c]),(0,r.useEffect)(()=>{S(e)},[e]);let T=(0,r.useCallback)(async()=>{try{let t=await fetch(`/api/hub/tasks?to_name=${encodeURIComponent(e)}&limit=30`),s=await t.json();s.tasks&&u(s.tasks.reverse())}catch{}finally{j(!0)}},[e]);(0,r.useEffect)(()=>{u([]),j(!1),T(),setTimeout(()=>I.current?.focus(),300)},[e,T]),(0,r.useEffect)(()=>{F.current?.scrollIntoView({behavior:"smooth"})},[d]),(0,r.useEffect)(()=>{if(0===y.size)return;let e=Date.now(),t=setInterval(async()=>{if(Date.now()-e>12e4){v(new Set),clearInterval(t);return}for(let e of y)try{let t=await fetch(`/api/hub/tasks?task_id=${encodeURIComponent(e)}`),s=await t.json();if(s.tasks?.[0]){let t=s.tasks[0];u(s=>s.map(s=>s.task_id===e?{...s,...t}:s)),["replied","failed","closed","expired","cancelled"].includes(t.status)&&v(t=>{let s=new Set(t);return s.delete(e),s})}}catch{}},2e3);return()=>clearInterval(t)},[y]);let $=async()=>{if(!h.trim()||x)return;let e=h.trim(),t=_,s=e.match(/^@(\S+)\s+([\s\S]+)/);if(s){let r=C.find(e=>e.toLowerCase()===s[1].toLowerCase());r&&(t=r,e=s[2])}g(!0),f(""),N(!1),I.current&&(I.current.style.height="auto");let r=`tmp-${Date.now()}`,n={task_id:r,from_name:"Dashboard",to_name:t,status:"created",priority:m,content:e,result:"",created_at:new Date().toISOString()};u(e=>[...e,n]);try{let s=await fetch("/api/hub/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({alias:t,task:e,priority:m})}),n=await s.json().catch(()=>({ok:!1,error:`HTTP ${s.status}`}));if(n.ok&&n.message_id)u(e=>e.map(e=>e.task_id===r?{...e,task_id:n.message_id,status:"delivered"}:e)),v(e=>new Set(e).add(n.message_id));else{let e=n.error||n.detail||`send failed (status ${s.status})`;u(t=>t.map(t=>t.task_id===r?{...t,status:"failed",result:`❌ ${e}`}:t))}}catch(t){let e=t instanceof Error?t.message:String(t);u(t=>t.map(t=>t.task_id===r?{...t,status:"failed",result:`❌ network error: ${e}`}:t))}g(!1),I.current?.focus()},A=C.filter(t=>t!==e&&t.toLowerCase().includes(k)).slice(0,8),E=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto px-4 py-4 space-y-4",children:[!b&&(0,t.jsx)("div",{className:"flex justify-center py-8",children:(0,t.jsx)("div",{className:"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin"})}),b&&0===d.length&&(0,t.jsxs)("div",{className:"text-center py-12",children:[(0,t.jsx)("div",{className:"text-3xl mb-3",children:"💬"}),(0,t.jsx)("div",{className:"text-gray-500 text-sm",children:"Start a conversation"}),(0,t.jsxs)("div",{className:"text-gray-600 text-xs mt-1",children:["Send a task to ",e]})]}),d.map((e,s)=>(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsxs)("div",{className:"max-w-[85%] bg-cyan-500/8 border border-cyan-500/15 rounded-2xl rounded-br-md px-4 py-2.5 shadow-sm",children:[(0,t.jsx)("div",{className:"text-[13px] text-gray-200",children:(0,t.jsx)(o,{text:e.content})}),(0,t.jsxs)("div",{className:"flex items-center justify-between mt-1.5 gap-3",children:[(0,t.jsx)(l,{status:e.status}),(0,t.jsx)("span",{className:"text-[9px] text-gray-600 shrink-0",children:(0,n.timeAgo)(e.created_at)})]})]})}),e.result&&(0,t.jsx)("div",{className:"flex justify-start",children:(0,t.jsxs)("div",{className:"max-w-[85%] bg-green-500/8 border border-green-500/15 rounded-2xl rounded-bl-md px-4 py-2.5 shadow-sm",children:[(0,t.jsx)("div",{className:"text-[10px] text-green-400 font-medium mb-1.5",children:e.to_name}),(0,t.jsx)("div",{className:"text-[13px] text-gray-200",children:(0,t.jsx)(o,{text:e.result})})]})}),"running"===e.status&&!e.result&&(0,t.jsx)("div",{className:"flex justify-start",children:(0,t.jsx)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-2xl rounded-bl-md px-4 py-3",children:(0,t.jsxs)("div",{className:"flex gap-1",children:[(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-gray-500 animate-bounce",style:{animationDelay:"0s"}}),(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-gray-500 animate-bounce",style:{animationDelay:"0.15s"}}),(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-gray-500 animate-bounce",style:{animationDelay:"0.3s"}})]})})})]},e.task_id)),(0,t.jsx)("div",{ref:F})]}),(0,t.jsxs)("div",{className:"border-t border-[#2a2a4a] bg-[#0d0d1a] px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex items-end gap-2",children:[(0,t.jsxs)("div",{className:"flex-1 relative",children:[w&&A.length>0&&(0,t.jsx)("div",{className:"absolute bottom-full left-0 right-0 mb-1 bg-[#111128] border border-[#2a2a4a] rounded-lg shadow-xl shadow-black/50 overflow-hidden z-10 max-h-48 overflow-y-auto",children:A.map(e=>(0,t.jsxs)("button",{onClick:()=>{let t,s;return t=h.lastIndexOf("@"),s=h.slice(0,t),void(f(`${s}@${e} `),N(!1),I.current?.focus())},className:"w-full flex items-center gap-2 px-3 py-2 text-xs text-left hover:bg-cyan-500/10 transition-colors",children:[(0,t.jsx)("span",{className:"w-2 h-2 rounded-full bg-cyan-400 shrink-0"}),(0,t.jsx)("span",{className:"text-gray-300",children:e})]},e))}),(0,t.jsx)("textarea",{ref:I,value:h,onChange:e=>{var t;(e=>{f(e);let t=e.lastIndexOf("@");if(t>=0&&(0===t||" "===e[t-1]||"\n"===e[t-1])){let s=e.slice(t+1);if(!s.includes(" ")&&!s.includes("\n")){R(s.toLowerCase()),N(!0);return}}N(!1)})(e.target.value),(t=e.target).style.height="auto",t.style.height=Math.min(t.scrollHeight,150)+"px"},onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),$()),"Escape"===e.key&&N(!1)},placeholder:`Message ${e}...`,rows:1,className:"w-full bg-[#111128] border border-[#2a2a4a] rounded-xl px-4 py-2.5 pr-16 text-sm text-white placeholder-gray-600 focus:border-cyan-500/40 focus:outline-none resize-none transition-colors"}),(0,t.jsx)("div",{className:"absolute right-2 bottom-1.5 flex items-center gap-1",children:(0,t.jsxs)("select",{value:m,onChange:e=>p(e.target.value),className:"bg-transparent text-[9px] text-gray-600 focus:outline-none cursor-pointer",children:[(0,t.jsx)("option",{value:"normal",children:"N"}),(0,t.jsx)("option",{value:"high",children:"H"}),(0,t.jsx)("option",{value:"low",children:"L"})]})})]}),(0,t.jsx)("button",{onClick:$,disabled:x||!h.trim(),className:"p-2.5 bg-cyan-600 hover:bg-cyan-500 disabled:bg-gray-800 disabled:text-gray-600 text-white rounded-xl transition-all shrink-0 active:scale-95",children:x?(0,t.jsx)("div",{className:"w-5 h-5 border-2 border-white/30 border-t-white rounded-full animate-spin"}):(0,t.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5"})})})]}),(0,t.jsxs)("div",{className:"flex justify-between text-[9px] text-gray-700 mt-1.5",children:[(0,t.jsx)("span",{children:h.includes("@")?`Sending to: ${_}`:"Type @ to mention another node"}),(0,t.jsx)("span",{children:"Enter to send · Shift+Enter for newline"})]})]})]});return a?(0,t.jsx)("div",{className:"flex flex-col h-full",children:E}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{onClick:i,className:"jsx-c3e56cbc81656d9 fixed inset-0 bg-black/30 z-40 lg:hidden"}),(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9 fixed top-0 right-0 h-full w-full lg:w-[500px] bg-[#0a0a1a] border-l border-[#2a2a4a] z-50 flex flex-col shadow-2xl shadow-black/60 animate-slide-in",children:[(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9 flex items-center justify-between px-4 py-3 border-b border-[#2a2a4a] bg-[#0d0d1a]",children:[(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9 flex items-center gap-3",children:[(0,t.jsx)("div",{className:"jsx-c3e56cbc81656d9 w-8 h-8 rounded-full bg-gradient-to-br from-cyan-500/30 to-blue-500/30 flex items-center justify-center text-xs font-bold text-cyan-300",children:e.slice(0,2)}),(0,t.jsxs)("div",{className:"jsx-c3e56cbc81656d9",children:[(0,t.jsx)("div",{className:"jsx-c3e56cbc81656d9 text-sm font-semibold text-white",children:e}),(0,t.jsx)("div",{className:"jsx-c3e56cbc81656d9 text-[10px] text-gray-500",children:y.size>0?"Processing...":"Ready"})]})]}),(0,t.jsx)("button",{onClick:i,className:"jsx-c3e56cbc81656d9 text-gray-500 hover:text-white p-1.5 rounded-lg hover:bg-[#1a1a2a]",children:(0,t.jsx)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,className:"jsx-c3e56cbc81656d9 w-5 h-5",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12",className:"jsx-c3e56cbc81656d9"})})})]}),E]}),(0,t.jsx)(s.default,{id:"c3e56cbc81656d9",children:"@keyframes slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.animate-slide-in{animation:.2s ease-out slide-in}"})]})}])}]);
|