@sleep2agi/agent-network-dashboard 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +4 -4
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +2 -2
- package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +2 -2
- package/.next/server/app/docs.rsc +3 -3
- package/.next/server/app/docs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +2 -2
- package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +2 -2
- package/.next/server/app/messages.rsc +2 -2
- package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +2 -2
- package/.next/server/app/node.rsc +2 -2
- package/.next/server/app/node.segments/_full.segment.rsc +2 -2
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +2 -2
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +2 -2
- package/.next/server/app/nodes.rsc +2 -2
- package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +2 -2
- package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +2 -2
- package/.next/server/app/settings/networks.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +2 -2
- package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/ssr/app_docs_page_tsx_0a3qz3_._.js +1 -1
- package/.next/server/chunks/ssr/app_docs_page_tsx_0a3qz3_._.js.map +1 -1
- package/.next/server/chunks/ssr/app_login_page_tsx_0z71ad3._.js +1 -1
- package/.next/server/chunks/ssr/app_login_page_tsx_0z71ad3._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{063eleenll4ri.js → 06.gd_vlnz5n0.js} +6 -6
- package/.next/static/chunks/{0yecbikzk4e1m.css → 0mz9c6--6di2j.css} +1 -1
- package/.next/static/chunks/{0afxijuigt-49.js → 0o5zj~5vjeks3.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/docs/page.tsx +1 -1
- package/app/globals.css +85 -0
- package/app/login/page.tsx +1 -1
- package/package.json +1 -1
- package/test-results/.last-run.json +2 -7
- package/test-results/e2e-Dashboard-E2E-Tests-nodes-page-shows-demo-nodes/error-context.md +0 -149
- package/test-results/e2e-Dashboard-E2E-Tests-overview-page-shows-stats/error-context.md +0 -149
- package/test-results/e2e-Dashboard-E2E-Tests-settings-page-shows-license-config/error-context.md +0 -149
- package/test-results/e2e-Dashboard-E2E-Tests-sidebar-navigation-works/error-context.md +0 -149
- package/tsconfig.tsbuildinfo +0 -1
- /package/.next/static/{w3FFQojHKbi2FsiXfCIUC → dR3GSMnwa4k46SIbP3PaK}/_buildManifest.js +0 -0
- /package/.next/static/{w3FFQojHKbi2FsiXfCIUC → dR3GSMnwa4k46SIbP3PaK}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{w3FFQojHKbi2FsiXfCIUC → dR3GSMnwa4k46SIbP3PaK}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" data-theme="cyber" class="geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/
|
|
1
|
+
<!DOCTYPE html><html lang="en" data-theme="cyber" class="geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/0mz9c6--6di2j.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0xrnwfefpke-g.js"/><script src="/_next/static/chunks/0pqt~8bl3ukh4.js" async=""></script><script src="/_next/static/chunks/0u359llqm1_01.js" async=""></script><script src="/_next/static/chunks/0e-wrhqh4h3r5.js" async=""></script><script src="/_next/static/chunks/turbopack-0vsvjs02l449s.js" async=""></script><script src="/_next/static/chunks/16bfhcp03jjz1.js" async=""></script><script src="/_next/static/chunks/14bsg3_-taiw4.js" async=""></script><script src="/_next/static/chunks/0ejz4zwhu3a3y.js" async=""></script><meta name="next-size-adjust" content=""/><meta name="theme-color" content="#0a0a1a"/><title>Agent Network Dashboard</title><meta name="description" content="Real-time monitoring dashboard for Agent Network nodes via CommHub"/><meta property="og:title" content="Agent Network Dashboard"/><meta property="og:description" content="Real-time monitoring dashboard for Agent Network nodes"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="Agent Network Dashboard"/><meta name="twitter:description" content="Real-time monitoring dashboard for Agent Network nodes"/><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><link rel="icon" href="/favicon.svg"/><script>
|
|
2
2
|
try {
|
|
3
3
|
var t = localStorage.getItem('anet-theme') || 'cyber';
|
|
4
4
|
document.documentElement.setAttribute('data-theme', t);
|
|
@@ -9,4 +9,4 @@ try {
|
|
|
9
9
|
w-52
|
|
10
10
|
-translate-x-full
|
|
11
11
|
lg:translate-x-0 lg:static lg:shrink-0
|
|
12
|
-
"><div class="px-4 py-5 border-b border-[#2a2a4a] "><div><div class="text-white font-bold text-sm">Agent Network</div><div class="text-gray-600 text-xs">Dashboard</div></div></div><div class="pb-20"><nav class="flex flex-col gap-1 px-2 py-4"><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"></path></svg><span>Overview</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] bg-cyan-500/10 text-cyan-300 border border-cyan-500/20 " href="/tasks"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path></svg><span>Tasks</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/nodes"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01"></path></svg><span>Nodes</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/messages"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path></svg><span>Messages</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/settings/networks"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"></path></svg><span>Networks</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/logs"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path></svg><span>Audit Log</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/server-logs"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg><span>Server Logs</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/admin"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"></path></svg><span>Admin</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/docs"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"></path></svg><span>Docs</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/settings"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path></svg><span>Settings</span></a></nav></div><div class="absolute bottom-0 left-0 right-0 border-t border-[#2a2a4a] bg-[#0d0d1a]"><button class="w-full flex items-center gap-3 px-5 py-3 text-xs text-gray-500 hover:text-red-400 hover:bg-red-500/5 transition-colors"><svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"></path></svg>Sign out</button><div class="flex items-center gap-2 px-3 py-2 justify-between"><div class="relative"><button aria-label="切换主题" class="px-2.5 py-1.5 rounded-md text-xs flex items-center gap-1.5 hover:opacity-80 transition-opacity" style="background:var(--bg-elevated);color:var(--fg);border:1px solid var(--border)"><span aria-hidden="true">🌃</span><span>Cyber</span></button></div><button class="hidden lg:flex p-1.5 rounded text-gray-600 hover:text-gray-400 transition-colors" aria-label="Collapse sidebar"><svg class="w-4 h-4 transition-transform " fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"></path></svg></button></div></div></aside><main class="flex-1 min-w-0"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><div class="min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono">Loading tasks...</div><!--/$--><!--$--><!--/$--></main></div><script src="/_next/static/chunks/0xrnwfefpke-g.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[84128,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"ThemeProvider\"]\n3:I[58963,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"NetworkProvider\"]\n4:I[25045,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"AppShell\"]\n5:I[39756,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"default\"]\n7:I[47257,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"ClientPageRoot\"]\n8:I[96527,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0ejz4zwhu3a3y.js\"],\"default\"]\nb:I[97367,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"OutletBoundary\"]\nc:\"$Sreact.suspense\"\nf:I[97367,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"ViewportBoundary\"]\n11:I[97367,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"MetadataBoundary\"]\n13:I[68027,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0yecbikzk4e1m.css\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"tasks\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"tasks\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0yecbikzk4e1m.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/16bfhcp03jjz1.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/14bsg3_-taiw4.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"cyber\",\"className\":\"geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\ntry {\\n var t = localStorage.getItem('anet-theme') || 'cyber';\\n document.documentElement.setAttribute('data-theme', t);\\n} catch (e) {}\\n\"}}]}],[\"$\",\"body\",null,{\"className\":\"min-h-full\",\"style\":{\"background\":\"var(--bg)\",\"color\":\"var(--fg)\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{\"Component\":\"$8\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@9\",\"$@a\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0ejz4zwhu3a3y.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@d\"}]}]]}],{},null,false,null]},null,false,\"$@e\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"children\":\"$L10\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L11\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L12\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0yecbikzk4e1m.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"w3FFQojHKbi2FsiXfCIUC\"}\n"])</script><script>self.__next_f.push([1,"14:[]\ne:\"$W14\"\n9:{}\na:\"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"10:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0a0a1a\"}]]\n"])</script><script>self.__next_f.push([1,"15:I[27201,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"IconMark\"]\nd:null\n12:[[\"$\",\"title\",\"0\",{\"children\":\"Agent Network Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Real-time monitoring dashboard for Agent Network nodes via CommHub\"}],[\"$\",\"meta\",\"2\",{\"property\":\"og:title\",\"content\":\"Agent Network Dashboard\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:description\",\"content\":\"Real-time monitoring dashboard for Agent Network nodes\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"5\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:title\",\"content\":\"Agent Network Dashboard\"}],[\"$\",\"meta\",\"7\",{\"name\":\"twitter:description\",\"content\":\"Real-time monitoring dashboard for Agent Network nodes\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$L15\",\"10\",{}]]\n"])</script></body></html>
|
|
12
|
+
"><div class="px-4 py-5 border-b border-[#2a2a4a] "><div><div class="text-white font-bold text-sm">Agent Network</div><div class="text-gray-600 text-xs">Dashboard</div></div></div><div class="pb-20"><nav class="flex flex-col gap-1 px-2 py-4"><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"></path></svg><span>Overview</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] bg-cyan-500/10 text-cyan-300 border border-cyan-500/20 " href="/tasks"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path></svg><span>Tasks</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/nodes"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01"></path></svg><span>Nodes</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/messages"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path></svg><span>Messages</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/settings/networks"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"></path></svg><span>Networks</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/logs"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path></svg><span>Audit Log</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/server-logs"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg><span>Server Logs</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/admin"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"></path></svg><span>Admin</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/docs"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"></path></svg><span>Docs</span></a><a class="flex items-center gap-3 px-3 py-3 rounded-lg text-sm transition-colors active:bg-[#1a1a3a] text-gray-400 hover:text-gray-200 hover:bg-[#1a1a2a] " href="/settings"><svg class="w-5 h-5 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path></svg><span>Settings</span></a></nav></div><div class="absolute bottom-0 left-0 right-0 border-t border-[#2a2a4a] bg-[#0d0d1a]"><button class="w-full flex items-center gap-3 px-5 py-3 text-xs text-gray-500 hover:text-red-400 hover:bg-red-500/5 transition-colors"><svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15m3 0l3-3m0 0l-3-3m3 3H9"></path></svg>Sign out</button><div class="flex items-center gap-2 px-3 py-2 justify-between"><div class="relative"><button aria-label="切换主题" class="px-2.5 py-1.5 rounded-md text-xs flex items-center gap-1.5 hover:opacity-80 transition-opacity" style="background:var(--bg-elevated);color:var(--fg);border:1px solid var(--border)"><span aria-hidden="true">🌃</span><span>Cyber</span></button></div><button class="hidden lg:flex p-1.5 rounded text-gray-600 hover:text-gray-400 transition-colors" aria-label="Collapse sidebar"><svg class="w-4 h-4 transition-transform " fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"></path></svg></button></div></div></aside><main class="flex-1 min-w-0"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><div class="min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono">Loading tasks...</div><!--/$--><!--$--><!--/$--></main></div><script src="/_next/static/chunks/0xrnwfefpke-g.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[84128,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"ThemeProvider\"]\n3:I[58963,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"NetworkProvider\"]\n4:I[25045,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"AppShell\"]\n5:I[39756,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"default\"]\n7:I[47257,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"ClientPageRoot\"]\n8:I[96527,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0ejz4zwhu3a3y.js\"],\"default\"]\nb:I[97367,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"OutletBoundary\"]\nc:\"$Sreact.suspense\"\nf:I[97367,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"ViewportBoundary\"]\n11:I[97367,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"MetadataBoundary\"]\n13:I[68027,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0mz9c6--6di2j.css\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"tasks\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"tasks\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0mz9c6--6di2j.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/16bfhcp03jjz1.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/14bsg3_-taiw4.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"cyber\",\"className\":\"geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\ntry {\\n var t = localStorage.getItem('anet-theme') || 'cyber';\\n document.documentElement.setAttribute('data-theme', t);\\n} catch (e) {}\\n\"}}]}],[\"$\",\"body\",null,{\"className\":\"min-h-full\",\"style\":{\"background\":\"var(--bg)\",\"color\":\"var(--fg)\"},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L7\",null,{\"Component\":\"$8\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@9\",\"$@a\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0ejz4zwhu3a3y.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@d\"}]}]]}],{},null,false,null]},null,false,\"$@e\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"children\":\"$L10\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L11\",null,{\"children\":[\"$\",\"$c\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L12\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0mz9c6--6di2j.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"dR3GSMnwa4k46SIbP3PaK\"}\n"])</script><script>self.__next_f.push([1,"14:[]\ne:\"$W14\"\n9:{}\na:\"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"10:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#0a0a1a\"}]]\n"])</script><script>self.__next_f.push([1,"15:I[27201,[\"/_next/static/chunks/16bfhcp03jjz1.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\"],\"IconMark\"]\nd:null\n12:[[\"$\",\"title\",\"0\",{\"children\":\"Agent Network Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Real-time monitoring dashboard for Agent Network nodes via CommHub\"}],[\"$\",\"meta\",\"2\",{\"property\":\"og:title\",\"content\":\"Agent Network Dashboard\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:description\",\"content\":\"Real-time monitoring dashboard for Agent Network nodes\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"5\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:title\",\"content\":\"Agent Network Dashboard\"}],[\"$\",\"meta\",\"7\",{\"name\":\"twitter:description\",\"content\":\"Real-time monitoring dashboard for Agent Network nodes\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$L15\",\"10\",{}]]\n"])</script></body></html>
|
|
@@ -11,9 +11,9 @@ c:"$Sreact.suspense"
|
|
|
11
11
|
f:I[97367,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"ViewportBoundary"]
|
|
12
12
|
11:I[97367,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"MetadataBoundary"]
|
|
13
13
|
13:I[68027,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"default",1]
|
|
14
|
-
:HL["/_next/static/chunks/
|
|
14
|
+
:HL["/_next/static/chunks/0mz9c6--6di2j.css","style"]
|
|
15
15
|
:HL["/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
16
|
-
0:{"P":null,"c":["","tasks"],"q":"","i":false,"f":[[["",{"children":["tasks",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/
|
|
16
|
+
0:{"P":null,"c":["","tasks"],"q":"","i":false,"f":[[["",{"children":["tasks",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0mz9c6--6di2j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16bfhcp03jjz1.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-theme":"cyber","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased","children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\ntry {\n var t = localStorage.getItem('anet-theme') || 'cyber';\n document.documentElement.setAttribute('data-theme', t);\n} catch (e) {}\n"}}]}],["$","body",null,{"className":"min-h-full","style":{"background":"var(--bg)","color":"var(--fg)"},"children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0ejz4zwhu3a3y.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0mz9c6--6di2j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"dR3GSMnwa4k46SIbP3PaK"}
|
|
17
17
|
14:[]
|
|
18
18
|
e:"$W14"
|
|
19
19
|
9:{}
|
|
@@ -11,9 +11,9 @@ c:"$Sreact.suspense"
|
|
|
11
11
|
f:I[97367,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"ViewportBoundary"]
|
|
12
12
|
11:I[97367,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"MetadataBoundary"]
|
|
13
13
|
13:I[68027,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"default",1]
|
|
14
|
-
:HL["/_next/static/chunks/
|
|
14
|
+
:HL["/_next/static/chunks/0mz9c6--6di2j.css","style"]
|
|
15
15
|
:HL["/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
16
|
-
0:{"P":null,"c":["","tasks"],"q":"","i":false,"f":[[["",{"children":["tasks",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/
|
|
16
|
+
0:{"P":null,"c":["","tasks"],"q":"","i":false,"f":[[["",{"children":["tasks",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0mz9c6--6di2j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16bfhcp03jjz1.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-theme":"cyber","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased","children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\ntry {\n var t = localStorage.getItem('anet-theme') || 'cyber';\n document.documentElement.setAttribute('data-theme', t);\n} catch (e) {}\n"}}]}],["$","body",null,{"className":"min-h-full","style":{"background":"var(--bg)","color":"var(--fg)"},"children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0ejz4zwhu3a3y.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0mz9c6--6di2j.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"dR3GSMnwa4k46SIbP3PaK"}
|
|
17
17
|
14:[]
|
|
18
18
|
e:"$W14"
|
|
19
19
|
9:{}
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
3:I[97367,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[27201,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"IconMark"]
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","2",{"name":"theme-color","content":"#0a0a1a"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Agent Network Dashboard"}],["$","meta","1",{"name":"description","content":"Real-time monitoring dashboard for Agent Network nodes via CommHub"}],["$","meta","2",{"property":"og:title","content":"Agent Network Dashboard"}],["$","meta","3",{"property":"og:description","content":"Real-time monitoring dashboard for Agent Network nodes"}],["$","meta","4",{"property":"og:type","content":"website"}],["$","meta","5",{"name":"twitter:card","content":"summary"}],["$","meta","6",{"name":"twitter:title","content":"Agent Network Dashboard"}],["$","meta","7",{"name":"twitter:description","content":"Real-time monitoring dashboard for Agent Network nodes"}],["$","link","8",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","link","9",{"rel":"icon","href":"/favicon.svg"}],["$","$L5","10",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","2",{"name":"theme-color","content":"#0a0a1a"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Agent Network Dashboard"}],["$","meta","1",{"name":"description","content":"Real-time monitoring dashboard for Agent Network nodes via CommHub"}],["$","meta","2",{"property":"og:title","content":"Agent Network Dashboard"}],["$","meta","3",{"property":"og:description","content":"Real-time monitoring dashboard for Agent Network nodes"}],["$","meta","4",{"property":"og:type","content":"website"}],["$","meta","5",{"name":"twitter:card","content":"summary"}],["$","meta","6",{"name":"twitter:title","content":"Agent Network Dashboard"}],["$","meta","7",{"name":"twitter:description","content":"Real-time monitoring dashboard for Agent Network nodes"}],["$","link","8",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","link","9",{"rel":"icon","href":"/favicon.svg"}],["$","$L5","10",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"dR3GSMnwa4k46SIbP3PaK"}
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
4:I[25045,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"AppShell"]
|
|
5
5
|
5:I[39756,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"default"]
|
|
6
6
|
6:I[37457,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"default"]
|
|
7
|
-
:HL["/_next/static/chunks/
|
|
8
|
-
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/
|
|
7
|
+
:HL["/_next/static/chunks/0mz9c6--6di2j.css","style"]
|
|
8
|
+
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0mz9c6--6di2j.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/16bfhcp03jjz1.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true}]],["$","html",null,{"lang":"en","data-theme":"cyber","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased","children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\ntry {\n var t = localStorage.getItem('anet-theme') || 'cyber';\n document.documentElement.setAttribute('data-theme', t);\n} catch (e) {}\n"}}]}],["$","body",null,{"className":"min-h-full","style":{"background":"var(--bg)","color":"var(--fg)"},"children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"dR3GSMnwa4k46SIbP3PaK"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
:HL["/_next/static/chunks/
|
|
1
|
+
:HL["/_next/static/chunks/0mz9c6--6di2j.css","style"]
|
|
2
2
|
:HL["/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
3
|
-
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"tasks","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"
|
|
3
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"tasks","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"dR3GSMnwa4k46SIbP3PaK"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
3:I[96527,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0ejz4zwhu3a3y.js"],"default"]
|
|
4
4
|
6:I[97367,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"OutletBoundary"]
|
|
5
5
|
7:"$Sreact.suspense"
|
|
6
|
-
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0ejz4zwhu3a3y.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
6
|
+
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0ejz4zwhu3a3y.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"dR3GSMnwa4k46SIbP3PaK"}
|
|
7
7
|
4:{}
|
|
8
8
|
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
|
|
9
9
|
8:null
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[39756,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"default"]
|
|
3
3
|
3:I[37457,["/_next/static/chunks/16bfhcp03jjz1.js","/_next/static/chunks/14bsg3_-taiw4.js"],"default"]
|
|
4
4
|
4:[]
|
|
5
|
-
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"dR3GSMnwa4k46SIbP3PaK"}
|
|
@@ -40,6 +40,6 @@ GET /api/tasks — 任务列表
|
|
|
40
40
|
GET /api/nodes — 节点列表
|
|
41
41
|
GET /api/stats — 统计
|
|
42
42
|
GET /api/audit-log — 审计日志
|
|
43
|
-
GET /health — 健康检查`})]}),(0,b.jsxs)(e,{id:"faq",title:"常见问题",children:[(0,b.jsx)(j,{q:"ChatPanel 发消息没反应?",a:"检查节点是否在线(Overview 页绿色圆点)。MiniMax 节点响应较慢(30-60秒正常)。"}),(0,b.jsx)(j,{q:"Tasks 页为空?",a:"确保通过 ChatPanel 或 MCP send_task 发送过任务。"}),(0,b.jsx)(j,{q:"切换网络后数据为空?",a:"新网络没有 Agent 注册。需要用该网络的 ntok_ 启动 Agent。"}),(0,b.jsx)(j,{q:"侧栏看不到新建的网络?",a:"侧栏每 15s 自动刷新。稍等或手动刷新页面。"}),(0,b.jsx)(j,{q:"Codex 节点报错?",a:"宿主机执行 codex auth login 刷新 token。"})]}),(0,b.jsx)("div",{className:"mt-16 pt-6 border-t border-[#2a2a4a] text-center text-xs text-gray-600",children:"Agent Network Dashboard · Powered by
|
|
43
|
+
GET /health — 健康检查`})]}),(0,b.jsxs)(e,{id:"faq",title:"常见问题",children:[(0,b.jsx)(j,{q:"ChatPanel 发消息没反应?",a:"检查节点是否在线(Overview 页绿色圆点)。MiniMax 节点响应较慢(30-60秒正常)。"}),(0,b.jsx)(j,{q:"Tasks 页为空?",a:"确保通过 ChatPanel 或 MCP send_task 发送过任务。"}),(0,b.jsx)(j,{q:"切换网络后数据为空?",a:"新网络没有 Agent 注册。需要用该网络的 ntok_ 启动 Agent。"}),(0,b.jsx)(j,{q:"侧栏看不到新建的网络?",a:"侧栏每 15s 自动刷新。稍等或手动刷新页面。"}),(0,b.jsx)(j,{q:"Codex 节点报错?",a:"宿主机执行 codex auth login 刷新 token。"})]}),(0,b.jsx)("div",{className:"mt-16 pt-6 border-t border-[#2a2a4a] text-center text-xs text-gray-600",children:"Agent Network Dashboard · Powered by Sleep2AGI"})]})]})}])}];
|
|
44
44
|
|
|
45
45
|
//# sourceMappingURL=app_docs_page_tsx_0a3qz3_._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../app/docs/page.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useEffect, useRef } from 'react';\n\nconst TOC = [\n { id: 'overview', label: '概览' },\n { id: 'login', label: '登录与注册' },\n { id: 'dashboard', label: 'Overview 首页' },\n { id: 'chat', label: 'ChatPanel 对话' },\n { id: 'nodes', label: 'Nodes 节点管理' },\n { id: 'tasks', label: 'Tasks 任务流水' },\n { id: 'messages', label: 'Messages 消息' },\n { id: 'networks', label: 'Networks 网络管理' },\n { id: 'admin', label: 'Admin 管理' },\n { id: 'cli', label: 'CLI 命令参考' },\n { id: 'config', label: '配置说明' },\n { id: 'api', label: 'API 参考' },\n { id: 'faq', label: '常见问题' },\n];\n\nexport default function DocsPage() {\n const [active, setActive] = useState('overview');\n const [tocOpen, setTocOpen] = useState(false);\n const [search, setSearch] = useState('');\n\n // Scroll spy\n useEffect(() => {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(e => { if (e.isIntersecting) setActive(e.target.id); });\n }, { rootMargin: '-20% 0px -70% 0px' });\n TOC.forEach(t => { const el = document.getElementById(t.id); if (el) observer.observe(el); });\n return () => observer.disconnect();\n }, []);\n\n const filteredToc = search ? TOC.filter(t => t.label.toLowerCase().includes(search.toLowerCase())) : TOC;\n\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex\">\n {/* Left sidebar TOC — desktop */}\n <aside className=\"hidden lg:block w-64 shrink-0 border-r border-[#2a2a4a] bg-[#0d0d1a] sticky top-0 h-screen overflow-y-auto\">\n <div className=\"p-4 border-b border-[#2a2a4a]\">\n <h2 className=\"text-sm font-bold text-white\">文档</h2>\n <p className=\"text-[10px] text-gray-600 mt-0.5\">Agent Network Dashboard</p>\n </div>\n <div className=\"px-3 py-2\">\n <input type=\"text\" value={search} onChange={e => setSearch(e.target.value)} placeholder=\"搜索文档...\"\n className=\"w-full bg-[#111128] border border-[#2a2a4a] rounded-lg px-3 py-1.5 text-xs text-white placeholder-gray-600 focus:border-cyan-500/40 focus:outline-none\" />\n </div>\n <nav className=\"px-2 pb-4\">\n {filteredToc.map(t => (\n <a key={t.id} href={`#${t.id}`}\n className={`block px-3 py-1.5 rounded-lg text-xs transition-colors ${\n active === t.id ? 'bg-cyan-500/10 text-cyan-300 border-l-2 border-cyan-400' : 'text-gray-500 hover:text-gray-300 hover:bg-[#1a1a2a]'\n }`}>{t.label}</a>\n ))}\n </nav>\n </aside>\n\n {/* Mobile TOC toggle */}\n <button onClick={() => setTocOpen(!tocOpen)}\n className=\"lg:hidden fixed bottom-4 right-4 z-50 w-12 h-12 bg-cyan-600 rounded-full shadow-lg flex items-center justify-center text-white\">\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 12h16M4 18h7\" />\n </svg>\n </button>\n {tocOpen && (\n <>\n <div className=\"lg:hidden fixed inset-0 bg-black/50 z-40\" onClick={() => setTocOpen(false)} />\n <div className=\"lg:hidden fixed left-0 top-0 h-full w-64 bg-[#0d0d1a] border-r border-[#2a2a4a] z-50 overflow-y-auto p-4\">\n <h2 className=\"text-sm font-bold text-white mb-3\">目录</h2>\n {TOC.map(t => (\n <a key={t.id} href={`#${t.id}`} onClick={() => setTocOpen(false)}\n className={`block px-3 py-2 rounded-lg text-sm ${active === t.id ? 'text-cyan-300 bg-cyan-500/10' : 'text-gray-400'}`}>{t.label}</a>\n ))}\n </div>\n </>\n )}\n\n {/* Content */}\n <main className=\"flex-1 max-w-3xl mx-auto px-4 sm:px-8 py-8 lg:ml-0 ml-10\">\n <h1 className=\"text-3xl font-bold text-white mb-1\">Agent Network Dashboard</h1>\n <p className=\"text-gray-500 text-sm mb-10\">企业级 AI Agent 军团管控平台 · 使用指南</p>\n\n <Section id=\"overview\" title=\"概览\">\n <p>Agent Network 是基于 MCP (Model Context Protocol) 的多智能体协作基础设施。通过 CommHub Server 实现 Agent 间的任务派发、状态同步、消息路由。</p>\n <StepList steps={['查看所有 Agent 节点的实时状态','通过 ChatPanel 直接与任意 Agent 对话','派发任务、查看执行结果','管理网络、成员、权限','查看审计日志和通信记录']} />\n </Section>\n\n <Section id=\"login\" title=\"登录与注册\">\n <p>首次使用需注册账号。第一个注册的用户自动成为 admin。</p>\n <CodeBlock lang=\"bash\">{`# 注册\nUsername: 自定义\nPassword: 至少 6 位\n\n# 登录后自动跳转到 Overview 首页`}</CodeBlock>\n <Callout type=\"warning\">HTTP 环境下 cookie 不带 Secure 标志(已适配 Docker 场景)。</Callout>\n </Section>\n\n <Section id=\"dashboard\" title=\"Overview 首页\">\n <p>首页展示军团全貌:</p>\n <FeatureGrid features={[\n { title: 'Stats 卡片', desc: 'Online / Working / Offline / Total 实时计数' },\n { title: '拓扑图', desc: '节点关系可视化(桌面端)' },\n { title: 'Agent 卡片', desc: 'alias、status、runtime、SSE 状态' },\n { title: 'Chat 按钮', desc: '点击任意卡片发任务' },\n { title: '⚡ Dispatch', desc: '多选 Agent 批量派发' },\n { title: 'Quick Actions', desc: 'Nodes / Tasks / Messages 快速跳转' },\n ]} />\n </Section>\n\n <Section id=\"chat\" title=\"ChatPanel 对话\">\n <p>点击 Agent 卡片上的 <span className=\"text-cyan-400 font-medium\">Chat</span> 按钮打开聊天面板:</p>\n <StepList steps={[\n '输入任务内容 → Cmd+Enter 或点 Send 发送',\n '实时状态追踪:created → delivered → running → replied',\n '回复内容支持 Markdown 渲染(代码块、粗体)',\n '输入 @ 可选择其他节点,跨节点通信',\n 'CommandCenter:多 tab 并行与多个 Agent 对话',\n ]} />\n </Section>\n\n <Section id=\"nodes\" title=\"Nodes 节点管理\">\n <p>查看所有在线节点。支持 <span className=\"text-cyan-400\">Grid</span> / <span className=\"text-cyan-400\">List</span> 视图。</p>\n <p className=\"mt-2\">点击节点进入详情页,三个 Tab:</p>\n <FeatureGrid features={[\n { title: '💬 Chat', desc: '与该节点对话(全宽聊天区域)' },\n { title: '📋 Events', desc: '任务事件时间线(分组、颜色编码)' },\n { title: '📊 Info', desc: 'Runtime / Model / Server / Session ID' },\n ]} />\n </Section>\n\n <Section id=\"tasks\" title=\"Tasks 任务流水\">\n <StepList steps={[\n 'Tab 筛选:All / created / delivered / running / replied / failed',\n '按 From / To 节点过滤',\n '点击展开 TaskDrawer:输入、输出、时长、事件时间线',\n 'Failed 任务一键 Retry',\n ]} />\n </Section>\n\n <Section id=\"messages\" title=\"Messages 消息\">\n <FeatureGrid features={[\n { title: 'Timeline / Grouped', desc: '按时间线或对话对分组' },\n { title: '类型过滤', desc: 'task / message / broadcast / reply' },\n { title: '搜索高亮', desc: '关键词黄色高亮' },\n { title: '导出 MD', desc: '下载 Markdown 格式' },\n ]} />\n </Section>\n\n <Section id=\"networks\" title=\"Networks 网络管理\">\n <p>不同网络的 Agent 互不可见。</p>\n <StepList steps={[\n '创建网络(名称 + 描述)',\n '管理成员(owner / admin / member / viewer)',\n '侧栏点击切换网络',\n '生成邀请码分享',\n ]} />\n </Section>\n\n <Section id=\"admin\" title=\"Admin 管理\">\n <FeatureGrid features={[\n { title: 'Broadcast', desc: '群发消息给所有在线节点' },\n { title: 'DispatchPanel', desc: '多选 Agent 批量派发任务' },\n { title: 'User Register', desc: '注册新用户' },\n { title: 'Stats', desc: '系统统计概览' },\n ]} />\n </Section>\n\n <Section id=\"cli\" title=\"CLI 命令参考\">\n <CodeBlock lang=\"bash\">{`# 安装\nnpm i -g @sleep2agi/agent-network\n\n# 快速开始\nanet quickstart\n\n# 创建 + 启动节点\nanet create my-bot --runtime codex-sdk\nanet start my-bot\n\n# 网络管理\nanet network create my-project\nanet network invite <network-id>\nanet network join <invite-code>\n\n# 状态\nanet whoami\nanet status`}</CodeBlock>\n </Section>\n\n <Section id=\"config\" title=\"配置说明\">\n <p>优先级:CLI 参数 > 环境变量 > 项目 config > 全局 config</p>\n <CodeBlock lang=\"json\">{`// ~/.anet/config.json\n{\n \"hub\": \"http://127.0.0.1:9200\",\n \"token\": \"ntok_xxx\"\n}\n\n// 节点配置 .anet/nodes/<name>/config.json\n{\n \"runtime\": \"codex-sdk\",\n \"model\": \"gpt-5.4\",\n \"tools\": [\"Read\", \"Write\", \"Bash\"]\n}`}</CodeBlock>\n <CodeBlock lang=\"bash\">{`# 环境变量\nCOMMHUB_URL=http://127.0.0.1:9200\nCOMMHUB_TOKEN=ntok_xxx`}</CodeBlock>\n </Section>\n\n <Section id=\"api\" title=\"API 参考\">\n <h3 className=\"text-base font-semibold text-white mt-4 mb-3\">MCP Tools</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n {[\n ['report_status', '心跳 + 状态上报'], ['report_completion', '任务完成汇报'],\n ['get_inbox', '拉取待办'], ['ack_inbox', '确认收到'],\n ['send_task', '派发任务'], ['send_message', '发消息'],\n ['send_reply', '回复任务'], ['broadcast', '群发'],\n ['get_all_status', '全局状态'], ['get_session_status', '单节点状态'],\n ['retry_task', '重试任务'], ['cancel_task', '取消任务'],\n ].map(([name, desc]) => (\n <div key={name} className=\"flex items-center gap-3 bg-[#111128] rounded-lg px-3 py-2 border border-[#2a2a4a]\">\n <code className=\"text-cyan-400 text-xs shrink-0\">{name}</code>\n <span className=\"text-gray-500 text-xs\">{desc}</span>\n </div>\n ))}\n </div>\n\n <h3 className=\"text-base font-semibold text-white mt-6 mb-3\">REST API</h3>\n <CodeBlock lang=\"http\">{`POST /api/auth/register — 注册\nPOST /api/auth/login — 登录\nGET /api/auth/me — 当前用户\nGET /api/status — 全局状态\nGET /api/tasks — 任务列表\nGET /api/nodes — 节点列表\nGET /api/stats — 统计\nGET /api/audit-log — 审计日志\nGET /health — 健康检查`}</CodeBlock>\n </Section>\n\n <Section id=\"faq\" title=\"常见问题\">\n <FAQ q=\"ChatPanel 发消息没反应?\" a=\"检查节点是否在线(Overview 页绿色圆点)。MiniMax 节点响应较慢(30-60秒正常)。\" />\n <FAQ q=\"Tasks 页为空?\" a=\"确保通过 ChatPanel 或 MCP send_task 发送过任务。\" />\n <FAQ q=\"切换网络后数据为空?\" a=\"新网络没有 Agent 注册。需要用该网络的 ntok_ 启动 Agent。\" />\n <FAQ q=\"侧栏看不到新建的网络?\" a=\"侧栏每 15s 自动刷新。稍等或手动刷新页面。\" />\n <FAQ q=\"Codex 节点报错?\" a=\"宿主机执行 codex auth login 刷新 token。\" />\n </Section>\n\n {/* Page nav */}\n <div className=\"mt-16 pt-6 border-t border-[#2a2a4a] text-center text-xs text-gray-600\">\n Agent Network Dashboard · Powered by CommHub V3\n </div>\n </main>\n </div>\n );\n}\n\nfunction Section({ id, title, children }: { id: string; title: string; children: React.ReactNode }) {\n return (\n <section id={id} className=\"mb-12 scroll-mt-8\">\n <h2 className=\"text-xl font-bold text-white mb-4 pb-2 border-b border-[#2a2a4a]\">{title}</h2>\n <div className=\"text-gray-300 text-sm leading-relaxed space-y-3\">{children}</div>\n </section>\n );\n}\n\nfunction CodeBlock({ children, lang }: { children: string; lang?: string }) {\n const [copied, setCopied] = useState(false);\n const copy = () => {\n navigator.clipboard.writeText(children);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <div className=\"mt-3 rounded-xl overflow-hidden border border-[#2a2a4a]\">\n <div className=\"flex items-center justify-between bg-[#0d0d1a] px-4 py-1.5 border-b border-[#2a2a4a]\">\n <span className=\"text-[10px] text-gray-600\">{lang || 'code'}</span>\n <button onClick={copy} className=\"text-[10px] text-gray-500 hover:text-gray-300 transition-colors\">\n {copied ? '✓ Copied' : 'Copy'}\n </button>\n </div>\n <pre className=\"bg-[#050510] px-4 py-3 text-[12px] text-green-300 overflow-x-auto leading-relaxed\">\n <code>{children}</code>\n </pre>\n </div>\n );\n}\n\nfunction StepList({ steps }: { steps: string[] }) {\n return (\n <div className=\"mt-3 space-y-2\">\n {steps.map((step, i) => (\n <div key={i} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"w-6 h-6 rounded-full bg-cyan-500/20 border border-cyan-500/30 flex items-center justify-center text-[10px] text-cyan-300 font-bold shrink-0\">{i + 1}</div>\n {i < steps.length - 1 && <div className=\"w-0.5 flex-1 mt-1 bg-[#2a2a4a]\" />}\n </div>\n <div className=\"text-sm text-gray-300 pt-0.5\">{step}</div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction FeatureGrid({ features }: { features: { title: string; desc: string }[] }) {\n return (\n <div className=\"mt-3 grid grid-cols-1 sm:grid-cols-2 gap-2\">\n {features.map(f => (\n <div key={f.title} className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl px-4 py-3\">\n <div className=\"text-sm text-white font-medium\">{f.title}</div>\n <div className=\"text-xs text-gray-500 mt-0.5\">{f.desc}</div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction Callout({ children, type }: { children: React.ReactNode; type: 'info' | 'warning' }) {\n const colors = type === 'warning' ? 'border-yellow-500/20 bg-yellow-500/5 text-yellow-300' : 'border-blue-500/20 bg-blue-500/5 text-blue-300';\n return <div className={`mt-3 px-4 py-2.5 rounded-xl border text-xs ${colors}`}>{type === 'warning' ? '⚠️ ' : 'ℹ️ '}{children}</div>;\n}\n\nfunction FAQ({ q, a }: { q: string; a: string }) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"mb-2 bg-[#111128] rounded-xl border border-[#2a2a4a] overflow-hidden\">\n <button onClick={() => setOpen(!open)} className=\"w-full flex items-center justify-between px-4 py-3 text-left\">\n <span className=\"text-sm text-cyan-400 font-medium\">{q}</span>\n <svg className={`w-4 h-4 text-gray-600 transition-transform ${open ? 'rotate-180' : ''}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {open && <div className=\"px-4 pb-3 text-sm text-gray-400\">{a}</div>}\n </div>\n );\n}\n"],"names":["TOC","id","label","DocsPage","active","setActive","tocOpen","setTocOpen","search","setSearch","observer","IntersectionObserver","entries","forEach","e","isIntersecting","target","rootMargin","t","el","document","getElementById","observe","disconnect","filteredToc","filter","toLowerCase","includes","className","type","value","onChange","placeholder","map","href","onClick","fill","viewBox","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","Section","title","StepList","steps","CodeBlock","lang","Callout","FeatureGrid","features","desc","name","FAQ","q","a","children","copied","setCopied","copy","navigator","clipboard","writeText","setTimeout","step","i","length","f","colors","open","setOpen"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../app/docs/page.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useEffect, useRef } from 'react';\n\nconst TOC = [\n { id: 'overview', label: '概览' },\n { id: 'login', label: '登录与注册' },\n { id: 'dashboard', label: 'Overview 首页' },\n { id: 'chat', label: 'ChatPanel 对话' },\n { id: 'nodes', label: 'Nodes 节点管理' },\n { id: 'tasks', label: 'Tasks 任务流水' },\n { id: 'messages', label: 'Messages 消息' },\n { id: 'networks', label: 'Networks 网络管理' },\n { id: 'admin', label: 'Admin 管理' },\n { id: 'cli', label: 'CLI 命令参考' },\n { id: 'config', label: '配置说明' },\n { id: 'api', label: 'API 参考' },\n { id: 'faq', label: '常见问题' },\n];\n\nexport default function DocsPage() {\n const [active, setActive] = useState('overview');\n const [tocOpen, setTocOpen] = useState(false);\n const [search, setSearch] = useState('');\n\n // Scroll spy\n useEffect(() => {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(e => { if (e.isIntersecting) setActive(e.target.id); });\n }, { rootMargin: '-20% 0px -70% 0px' });\n TOC.forEach(t => { const el = document.getElementById(t.id); if (el) observer.observe(el); });\n return () => observer.disconnect();\n }, []);\n\n const filteredToc = search ? TOC.filter(t => t.label.toLowerCase().includes(search.toLowerCase())) : TOC;\n\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex\">\n {/* Left sidebar TOC — desktop */}\n <aside className=\"hidden lg:block w-64 shrink-0 border-r border-[#2a2a4a] bg-[#0d0d1a] sticky top-0 h-screen overflow-y-auto\">\n <div className=\"p-4 border-b border-[#2a2a4a]\">\n <h2 className=\"text-sm font-bold text-white\">文档</h2>\n <p className=\"text-[10px] text-gray-600 mt-0.5\">Agent Network Dashboard</p>\n </div>\n <div className=\"px-3 py-2\">\n <input type=\"text\" value={search} onChange={e => setSearch(e.target.value)} placeholder=\"搜索文档...\"\n className=\"w-full bg-[#111128] border border-[#2a2a4a] rounded-lg px-3 py-1.5 text-xs text-white placeholder-gray-600 focus:border-cyan-500/40 focus:outline-none\" />\n </div>\n <nav className=\"px-2 pb-4\">\n {filteredToc.map(t => (\n <a key={t.id} href={`#${t.id}`}\n className={`block px-3 py-1.5 rounded-lg text-xs transition-colors ${\n active === t.id ? 'bg-cyan-500/10 text-cyan-300 border-l-2 border-cyan-400' : 'text-gray-500 hover:text-gray-300 hover:bg-[#1a1a2a]'\n }`}>{t.label}</a>\n ))}\n </nav>\n </aside>\n\n {/* Mobile TOC toggle */}\n <button onClick={() => setTocOpen(!tocOpen)}\n className=\"lg:hidden fixed bottom-4 right-4 z-50 w-12 h-12 bg-cyan-600 rounded-full shadow-lg flex items-center justify-center text-white\">\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 12h16M4 18h7\" />\n </svg>\n </button>\n {tocOpen && (\n <>\n <div className=\"lg:hidden fixed inset-0 bg-black/50 z-40\" onClick={() => setTocOpen(false)} />\n <div className=\"lg:hidden fixed left-0 top-0 h-full w-64 bg-[#0d0d1a] border-r border-[#2a2a4a] z-50 overflow-y-auto p-4\">\n <h2 className=\"text-sm font-bold text-white mb-3\">目录</h2>\n {TOC.map(t => (\n <a key={t.id} href={`#${t.id}`} onClick={() => setTocOpen(false)}\n className={`block px-3 py-2 rounded-lg text-sm ${active === t.id ? 'text-cyan-300 bg-cyan-500/10' : 'text-gray-400'}`}>{t.label}</a>\n ))}\n </div>\n </>\n )}\n\n {/* Content */}\n <main className=\"flex-1 max-w-3xl mx-auto px-4 sm:px-8 py-8 lg:ml-0 ml-10\">\n <h1 className=\"text-3xl font-bold text-white mb-1\">Agent Network Dashboard</h1>\n <p className=\"text-gray-500 text-sm mb-10\">企业级 AI Agent 军团管控平台 · 使用指南</p>\n\n <Section id=\"overview\" title=\"概览\">\n <p>Agent Network 是基于 MCP (Model Context Protocol) 的多智能体协作基础设施。通过 CommHub Server 实现 Agent 间的任务派发、状态同步、消息路由。</p>\n <StepList steps={['查看所有 Agent 节点的实时状态','通过 ChatPanel 直接与任意 Agent 对话','派发任务、查看执行结果','管理网络、成员、权限','查看审计日志和通信记录']} />\n </Section>\n\n <Section id=\"login\" title=\"登录与注册\">\n <p>首次使用需注册账号。第一个注册的用户自动成为 admin。</p>\n <CodeBlock lang=\"bash\">{`# 注册\nUsername: 自定义\nPassword: 至少 6 位\n\n# 登录后自动跳转到 Overview 首页`}</CodeBlock>\n <Callout type=\"warning\">HTTP 环境下 cookie 不带 Secure 标志(已适配 Docker 场景)。</Callout>\n </Section>\n\n <Section id=\"dashboard\" title=\"Overview 首页\">\n <p>首页展示军团全貌:</p>\n <FeatureGrid features={[\n { title: 'Stats 卡片', desc: 'Online / Working / Offline / Total 实时计数' },\n { title: '拓扑图', desc: '节点关系可视化(桌面端)' },\n { title: 'Agent 卡片', desc: 'alias、status、runtime、SSE 状态' },\n { title: 'Chat 按钮', desc: '点击任意卡片发任务' },\n { title: '⚡ Dispatch', desc: '多选 Agent 批量派发' },\n { title: 'Quick Actions', desc: 'Nodes / Tasks / Messages 快速跳转' },\n ]} />\n </Section>\n\n <Section id=\"chat\" title=\"ChatPanel 对话\">\n <p>点击 Agent 卡片上的 <span className=\"text-cyan-400 font-medium\">Chat</span> 按钮打开聊天面板:</p>\n <StepList steps={[\n '输入任务内容 → Cmd+Enter 或点 Send 发送',\n '实时状态追踪:created → delivered → running → replied',\n '回复内容支持 Markdown 渲染(代码块、粗体)',\n '输入 @ 可选择其他节点,跨节点通信',\n 'CommandCenter:多 tab 并行与多个 Agent 对话',\n ]} />\n </Section>\n\n <Section id=\"nodes\" title=\"Nodes 节点管理\">\n <p>查看所有在线节点。支持 <span className=\"text-cyan-400\">Grid</span> / <span className=\"text-cyan-400\">List</span> 视图。</p>\n <p className=\"mt-2\">点击节点进入详情页,三个 Tab:</p>\n <FeatureGrid features={[\n { title: '💬 Chat', desc: '与该节点对话(全宽聊天区域)' },\n { title: '📋 Events', desc: '任务事件时间线(分组、颜色编码)' },\n { title: '📊 Info', desc: 'Runtime / Model / Server / Session ID' },\n ]} />\n </Section>\n\n <Section id=\"tasks\" title=\"Tasks 任务流水\">\n <StepList steps={[\n 'Tab 筛选:All / created / delivered / running / replied / failed',\n '按 From / To 节点过滤',\n '点击展开 TaskDrawer:输入、输出、时长、事件时间线',\n 'Failed 任务一键 Retry',\n ]} />\n </Section>\n\n <Section id=\"messages\" title=\"Messages 消息\">\n <FeatureGrid features={[\n { title: 'Timeline / Grouped', desc: '按时间线或对话对分组' },\n { title: '类型过滤', desc: 'task / message / broadcast / reply' },\n { title: '搜索高亮', desc: '关键词黄色高亮' },\n { title: '导出 MD', desc: '下载 Markdown 格式' },\n ]} />\n </Section>\n\n <Section id=\"networks\" title=\"Networks 网络管理\">\n <p>不同网络的 Agent 互不可见。</p>\n <StepList steps={[\n '创建网络(名称 + 描述)',\n '管理成员(owner / admin / member / viewer)',\n '侧栏点击切换网络',\n '生成邀请码分享',\n ]} />\n </Section>\n\n <Section id=\"admin\" title=\"Admin 管理\">\n <FeatureGrid features={[\n { title: 'Broadcast', desc: '群发消息给所有在线节点' },\n { title: 'DispatchPanel', desc: '多选 Agent 批量派发任务' },\n { title: 'User Register', desc: '注册新用户' },\n { title: 'Stats', desc: '系统统计概览' },\n ]} />\n </Section>\n\n <Section id=\"cli\" title=\"CLI 命令参考\">\n <CodeBlock lang=\"bash\">{`# 安装\nnpm i -g @sleep2agi/agent-network\n\n# 快速开始\nanet quickstart\n\n# 创建 + 启动节点\nanet create my-bot --runtime codex-sdk\nanet start my-bot\n\n# 网络管理\nanet network create my-project\nanet network invite <network-id>\nanet network join <invite-code>\n\n# 状态\nanet whoami\nanet status`}</CodeBlock>\n </Section>\n\n <Section id=\"config\" title=\"配置说明\">\n <p>优先级:CLI 参数 > 环境变量 > 项目 config > 全局 config</p>\n <CodeBlock lang=\"json\">{`// ~/.anet/config.json\n{\n \"hub\": \"http://127.0.0.1:9200\",\n \"token\": \"ntok_xxx\"\n}\n\n// 节点配置 .anet/nodes/<name>/config.json\n{\n \"runtime\": \"codex-sdk\",\n \"model\": \"gpt-5.4\",\n \"tools\": [\"Read\", \"Write\", \"Bash\"]\n}`}</CodeBlock>\n <CodeBlock lang=\"bash\">{`# 环境变量\nCOMMHUB_URL=http://127.0.0.1:9200\nCOMMHUB_TOKEN=ntok_xxx`}</CodeBlock>\n </Section>\n\n <Section id=\"api\" title=\"API 参考\">\n <h3 className=\"text-base font-semibold text-white mt-4 mb-3\">MCP Tools</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n {[\n ['report_status', '心跳 + 状态上报'], ['report_completion', '任务完成汇报'],\n ['get_inbox', '拉取待办'], ['ack_inbox', '确认收到'],\n ['send_task', '派发任务'], ['send_message', '发消息'],\n ['send_reply', '回复任务'], ['broadcast', '群发'],\n ['get_all_status', '全局状态'], ['get_session_status', '单节点状态'],\n ['retry_task', '重试任务'], ['cancel_task', '取消任务'],\n ].map(([name, desc]) => (\n <div key={name} className=\"flex items-center gap-3 bg-[#111128] rounded-lg px-3 py-2 border border-[#2a2a4a]\">\n <code className=\"text-cyan-400 text-xs shrink-0\">{name}</code>\n <span className=\"text-gray-500 text-xs\">{desc}</span>\n </div>\n ))}\n </div>\n\n <h3 className=\"text-base font-semibold text-white mt-6 mb-3\">REST API</h3>\n <CodeBlock lang=\"http\">{`POST /api/auth/register — 注册\nPOST /api/auth/login — 登录\nGET /api/auth/me — 当前用户\nGET /api/status — 全局状态\nGET /api/tasks — 任务列表\nGET /api/nodes — 节点列表\nGET /api/stats — 统计\nGET /api/audit-log — 审计日志\nGET /health — 健康检查`}</CodeBlock>\n </Section>\n\n <Section id=\"faq\" title=\"常见问题\">\n <FAQ q=\"ChatPanel 发消息没反应?\" a=\"检查节点是否在线(Overview 页绿色圆点)。MiniMax 节点响应较慢(30-60秒正常)。\" />\n <FAQ q=\"Tasks 页为空?\" a=\"确保通过 ChatPanel 或 MCP send_task 发送过任务。\" />\n <FAQ q=\"切换网络后数据为空?\" a=\"新网络没有 Agent 注册。需要用该网络的 ntok_ 启动 Agent。\" />\n <FAQ q=\"侧栏看不到新建的网络?\" a=\"侧栏每 15s 自动刷新。稍等或手动刷新页面。\" />\n <FAQ q=\"Codex 节点报错?\" a=\"宿主机执行 codex auth login 刷新 token。\" />\n </Section>\n\n {/* Page nav */}\n <div className=\"mt-16 pt-6 border-t border-[#2a2a4a] text-center text-xs text-gray-600\">\n Agent Network Dashboard · Powered by Sleep2AGI\n </div>\n </main>\n </div>\n );\n}\n\nfunction Section({ id, title, children }: { id: string; title: string; children: React.ReactNode }) {\n return (\n <section id={id} className=\"mb-12 scroll-mt-8\">\n <h2 className=\"text-xl font-bold text-white mb-4 pb-2 border-b border-[#2a2a4a]\">{title}</h2>\n <div className=\"text-gray-300 text-sm leading-relaxed space-y-3\">{children}</div>\n </section>\n );\n}\n\nfunction CodeBlock({ children, lang }: { children: string; lang?: string }) {\n const [copied, setCopied] = useState(false);\n const copy = () => {\n navigator.clipboard.writeText(children);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <div className=\"mt-3 rounded-xl overflow-hidden border border-[#2a2a4a]\">\n <div className=\"flex items-center justify-between bg-[#0d0d1a] px-4 py-1.5 border-b border-[#2a2a4a]\">\n <span className=\"text-[10px] text-gray-600\">{lang || 'code'}</span>\n <button onClick={copy} className=\"text-[10px] text-gray-500 hover:text-gray-300 transition-colors\">\n {copied ? '✓ Copied' : 'Copy'}\n </button>\n </div>\n <pre className=\"bg-[#050510] px-4 py-3 text-[12px] text-green-300 overflow-x-auto leading-relaxed\">\n <code>{children}</code>\n </pre>\n </div>\n );\n}\n\nfunction StepList({ steps }: { steps: string[] }) {\n return (\n <div className=\"mt-3 space-y-2\">\n {steps.map((step, i) => (\n <div key={i} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"w-6 h-6 rounded-full bg-cyan-500/20 border border-cyan-500/30 flex items-center justify-center text-[10px] text-cyan-300 font-bold shrink-0\">{i + 1}</div>\n {i < steps.length - 1 && <div className=\"w-0.5 flex-1 mt-1 bg-[#2a2a4a]\" />}\n </div>\n <div className=\"text-sm text-gray-300 pt-0.5\">{step}</div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction FeatureGrid({ features }: { features: { title: string; desc: string }[] }) {\n return (\n <div className=\"mt-3 grid grid-cols-1 sm:grid-cols-2 gap-2\">\n {features.map(f => (\n <div key={f.title} className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl px-4 py-3\">\n <div className=\"text-sm text-white font-medium\">{f.title}</div>\n <div className=\"text-xs text-gray-500 mt-0.5\">{f.desc}</div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction Callout({ children, type }: { children: React.ReactNode; type: 'info' | 'warning' }) {\n const colors = type === 'warning' ? 'border-yellow-500/20 bg-yellow-500/5 text-yellow-300' : 'border-blue-500/20 bg-blue-500/5 text-blue-300';\n return <div className={`mt-3 px-4 py-2.5 rounded-xl border text-xs ${colors}`}>{type === 'warning' ? '⚠️ ' : 'ℹ️ '}{children}</div>;\n}\n\nfunction FAQ({ q, a }: { q: string; a: string }) {\n const [open, setOpen] = useState(false);\n return (\n <div className=\"mb-2 bg-[#111128] rounded-xl border border-[#2a2a4a] overflow-hidden\">\n <button onClick={() => setOpen(!open)} className=\"w-full flex items-center justify-between px-4 py-3 text-left\">\n <span className=\"text-sm text-cyan-400 font-medium\">{q}</span>\n <svg className={`w-4 h-4 text-gray-600 transition-transform ${open ? 'rotate-180' : ''}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {open && <div className=\"px-4 pb-3 text-sm text-gray-400\">{a}</div>}\n </div>\n );\n}\n"],"names":["TOC","id","label","DocsPage","active","setActive","tocOpen","setTocOpen","search","setSearch","observer","IntersectionObserver","entries","forEach","e","isIntersecting","target","rootMargin","t","el","document","getElementById","observe","disconnect","filteredToc","filter","toLowerCase","includes","className","type","value","onChange","placeholder","map","href","onClick","fill","viewBox","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","Section","title","StepList","steps","CodeBlock","lang","Callout","FeatureGrid","features","desc","name","FAQ","q","a","children","copied","setCopied","copy","navigator","clipboard","writeText","setTimeout","step","i","length","f","colors","open","setOpen"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[83694,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["default",0,function(){let[a,d]=(0,c.useState)("login"),[e,f]=(0,c.useState)(""),[g,h]=(0,c.useState)(""),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(!1),m=async b=>{b.preventDefault(),l(!0),j("");try{let b=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:a,username:e,password:g})}),c=await b.json();if(c.ok){c.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:c.user,token:c.token,networks:c.networks||[],currentNetwork:c.network_id||c.networks?.[0]?.network_id||""})),window.location.assign("/");return}j(c.error||"Login failed")}catch{j("Connection failed")}l(!1)};return(0,b.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden",children:[(0,b.jsxs)("div",{className:"absolute inset-0 pointer-events-none",children:[(0,b.jsx)("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 w-[600px] h-[600px] rounded-full bg-cyan-500/5 blur-[120px]"}),(0,b.jsx)("div",{className:"absolute bottom-1/4 left-1/3 w-[400px] h-[400px] rounded-full bg-blue-500/5 blur-[100px]"})]}),(0,b.jsxs)("div",{className:"relative w-full max-w-sm mx-4",children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-gradient-to-br from-cyan-500/20 to-blue-500/20 border border-cyan-500/20 mb-4",children:(0,b.jsx)("svg",{className:"w-8 h-8 text-cyan-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:(0,b.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z"})})}),(0,b.jsx)("h1",{className:"text-2xl font-bold text-white tracking-tight",children:"Agent Network"}),(0,b.jsx)("p",{className:"text-sm text-gray-500 mt-1",children:"Dashboard"})]}),(0,b.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(c=>(0,b.jsx)("button",{type:"button",onClick:()=>{d(c),j("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${a===c?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===c?"Sign in":"Register"},c))}),(0,b.jsxs)("form",{onSubmit:m,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,b.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,b.jsx)("input",{id:"username",type:"text",value:e,onChange:a=>f(a.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,b.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,b.jsx)("input",{id:"password",type:"password",value:g,onChange:a=>h(a.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),i&&(0,b.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:i}),(0,b.jsx)("button",{type:"submit",disabled:k||!g,className:"mt-5 w-full px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:k?"login"===a?"Signing in...":"Registering...":"login"===a?"Sign in":"Create account"})]}),(0,b.jsx)("p",{className:"text-center text-xs text-gray-700 mt-6",children:"Powered by
|
|
1
|
+
module.exports=[83694,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["default",0,function(){let[a,d]=(0,c.useState)("login"),[e,f]=(0,c.useState)(""),[g,h]=(0,c.useState)(""),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(!1),m=async b=>{b.preventDefault(),l(!0),j("");try{let b=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:a,username:e,password:g})}),c=await b.json();if(c.ok){c.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:c.user,token:c.token,networks:c.networks||[],currentNetwork:c.network_id||c.networks?.[0]?.network_id||""})),window.location.assign("/");return}j(c.error||"Login failed")}catch{j("Connection failed")}l(!1)};return(0,b.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden",children:[(0,b.jsxs)("div",{className:"absolute inset-0 pointer-events-none",children:[(0,b.jsx)("div",{className:"absolute top-1/4 left-1/2 -translate-x-1/2 w-[600px] h-[600px] rounded-full bg-cyan-500/5 blur-[120px]"}),(0,b.jsx)("div",{className:"absolute bottom-1/4 left-1/3 w-[400px] h-[400px] rounded-full bg-blue-500/5 blur-[100px]"})]}),(0,b.jsxs)("div",{className:"relative w-full max-w-sm mx-4",children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-gradient-to-br from-cyan-500/20 to-blue-500/20 border border-cyan-500/20 mb-4",children:(0,b.jsx)("svg",{className:"w-8 h-8 text-cyan-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:(0,b.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z"})})}),(0,b.jsx)("h1",{className:"text-2xl font-bold text-white tracking-tight",children:"Agent Network"}),(0,b.jsx)("p",{className:"text-sm text-gray-500 mt-1",children:"Dashboard"})]}),(0,b.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(c=>(0,b.jsx)("button",{type:"button",onClick:()=>{d(c),j("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${a===c?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===c?"Sign in":"Register"},c))}),(0,b.jsxs)("form",{onSubmit:m,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,b.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,b.jsx)("input",{id:"username",type:"text",value:e,onChange:a=>f(a.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,b.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,b.jsx)("input",{id:"password",type:"password",value:g,onChange:a=>h(a.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),i&&(0,b.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:i}),(0,b.jsx)("button",{type:"submit",disabled:k||!g,className:"mt-5 w-full px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:k?"login"===a?"Signing in...":"Registering...":"login"===a?"Sign in":"Create account"})]}),(0,b.jsx)("p",{className:"text-center text-xs text-gray-700 mt-6",children:"Powered by Sleep2AGI"})]})]})}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=app_login_page_tsx_0z71ad3._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../app/login/page.tsx"],"sourcesContent":["'use client';\n\nimport { FormEvent, useState } from 'react';\n\nexport default function LoginPage() {\n const [mode, setMode] = useState<'login' | 'register'>('login');\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n const [error, setError] = useState('');\n const [pending, setPending] = useState(false);\n\n const submit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setPending(true);\n setError('');\n\n try {\n const res = await fetch('/api/auth/v3', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: mode, username, password }),\n });\n const data = await res.json();\n\n if (data.ok) {\n // Store V3 auth data for client-side features\n if (data.token) {\n sessionStorage.setItem('anet_v3_auth', JSON.stringify({\n user: data.user,\n token: data.token,\n networks: data.networks || [],\n currentNetwork: data.network_id || data.networks?.[0]?.network_id || '',\n }));\n }\n window.location.assign('/');\n return;\n }\n\n setError(data.error || 'Login failed');\n } catch {\n setError('Connection failed');\n }\n setPending(false);\n };\n\n return (\n <main className=\"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden\">\n <div className=\"absolute inset-0 pointer-events-none\">\n <div className=\"absolute top-1/4 left-1/2 -translate-x-1/2 w-[600px] h-[600px] rounded-full bg-cyan-500/5 blur-[120px]\" />\n <div className=\"absolute bottom-1/4 left-1/3 w-[400px] h-[400px] rounded-full bg-blue-500/5 blur-[100px]\" />\n </div>\n\n <div className=\"relative w-full max-w-sm mx-4\">\n <div className=\"text-center mb-8\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-gradient-to-br from-cyan-500/20 to-blue-500/20 border border-cyan-500/20 mb-4\">\n <svg className=\"w-8 h-8 text-cyan-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z\" />\n </svg>\n </div>\n <h1 className=\"text-2xl font-bold text-white tracking-tight\">Agent Network</h1>\n <p className=\"text-sm text-gray-500 mt-1\">Dashboard</p>\n </div>\n\n {/* Mode toggle */}\n <div className=\"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4\">\n {(['login', 'register'] as const).map(m => (\n <button key={m} type=\"button\" onClick={() => { setMode(m); setError(''); }}\n className={`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${mode === m ? 'bg-cyan-500/10 text-cyan-300' : 'text-gray-500 hover:text-gray-200'}`}>\n {m === 'login' ? 'Sign in' : 'Register'}\n </button>\n ))}\n </div>\n\n <form onSubmit={submit} className=\"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30\">\n <label htmlFor=\"username\" className=\"block text-xs text-gray-500 mb-2 uppercase tracking-wider\">\n Username\n </label>\n <input id=\"username\" type=\"text\" value={username} onChange={e => setUsername(e.target.value)} autoFocus\n placeholder=\"Enter username\"\n className=\"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4\" />\n\n <label htmlFor=\"password\" className=\"block text-xs text-gray-500 mb-2 uppercase tracking-wider\">\n Password\n </label>\n <input id=\"password\" type=\"password\" value={password} onChange={e => setPassword(e.target.value)}\n placeholder=\"Enter password\"\n className=\"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all\" />\n\n {error && (\n <div className=\"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2\">{error}</div>\n )}\n\n <button type=\"submit\" disabled={pending || !password}\n className=\"mt-5 w-full px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none\">\n {pending ? (mode === 'login' ? 'Signing in...' : 'Registering...') : (mode === 'login' ? 'Sign in' : 'Create account')}\n </button>\n </form>\n\n <p className=\"text-center text-xs text-gray-700 mt-6\">Powered by
|
|
1
|
+
{"version":3,"sources":["../../../../app/login/page.tsx"],"sourcesContent":["'use client';\n\nimport { FormEvent, useState } from 'react';\n\nexport default function LoginPage() {\n const [mode, setMode] = useState<'login' | 'register'>('login');\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n const [error, setError] = useState('');\n const [pending, setPending] = useState(false);\n\n const submit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n setPending(true);\n setError('');\n\n try {\n const res = await fetch('/api/auth/v3', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ action: mode, username, password }),\n });\n const data = await res.json();\n\n if (data.ok) {\n // Store V3 auth data for client-side features\n if (data.token) {\n sessionStorage.setItem('anet_v3_auth', JSON.stringify({\n user: data.user,\n token: data.token,\n networks: data.networks || [],\n currentNetwork: data.network_id || data.networks?.[0]?.network_id || '',\n }));\n }\n window.location.assign('/');\n return;\n }\n\n setError(data.error || 'Login failed');\n } catch {\n setError('Connection failed');\n }\n setPending(false);\n };\n\n return (\n <main className=\"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden\">\n <div className=\"absolute inset-0 pointer-events-none\">\n <div className=\"absolute top-1/4 left-1/2 -translate-x-1/2 w-[600px] h-[600px] rounded-full bg-cyan-500/5 blur-[120px]\" />\n <div className=\"absolute bottom-1/4 left-1/3 w-[400px] h-[400px] rounded-full bg-blue-500/5 blur-[100px]\" />\n </div>\n\n <div className=\"relative w-full max-w-sm mx-4\">\n <div className=\"text-center mb-8\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-gradient-to-br from-cyan-500/20 to-blue-500/20 border border-cyan-500/20 mb-4\">\n <svg className=\"w-8 h-8 text-cyan-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z\" />\n </svg>\n </div>\n <h1 className=\"text-2xl font-bold text-white tracking-tight\">Agent Network</h1>\n <p className=\"text-sm text-gray-500 mt-1\">Dashboard</p>\n </div>\n\n {/* Mode toggle */}\n <div className=\"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4\">\n {(['login', 'register'] as const).map(m => (\n <button key={m} type=\"button\" onClick={() => { setMode(m); setError(''); }}\n className={`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${mode === m ? 'bg-cyan-500/10 text-cyan-300' : 'text-gray-500 hover:text-gray-200'}`}>\n {m === 'login' ? 'Sign in' : 'Register'}\n </button>\n ))}\n </div>\n\n <form onSubmit={submit} className=\"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30\">\n <label htmlFor=\"username\" className=\"block text-xs text-gray-500 mb-2 uppercase tracking-wider\">\n Username\n </label>\n <input id=\"username\" type=\"text\" value={username} onChange={e => setUsername(e.target.value)} autoFocus\n placeholder=\"Enter username\"\n className=\"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4\" />\n\n <label htmlFor=\"password\" className=\"block text-xs text-gray-500 mb-2 uppercase tracking-wider\">\n Password\n </label>\n <input id=\"password\" type=\"password\" value={password} onChange={e => setPassword(e.target.value)}\n placeholder=\"Enter password\"\n className=\"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all\" />\n\n {error && (\n <div className=\"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2\">{error}</div>\n )}\n\n <button type=\"submit\" disabled={pending || !password}\n className=\"mt-5 w-full px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none\">\n {pending ? (mode === 'login' ? 'Signing in...' : 'Registering...') : (mode === 'login' ? 'Sign in' : 'Create account')}\n </button>\n </form>\n\n <p className=\"text-center text-xs text-gray-700 mt-6\">Powered by Sleep2AGI</p>\n </div>\n </main>\n );\n}\n"],"names":["LoginPage","mode","setMode","username","setUsername","password","setPassword","error","setError","pending","setPending","submit","event","preventDefault","res","fetch","method","headers","body","JSON","stringify","action","data","json","ok","token","sessionStorage","setItem","user","networks","currentNetwork","network_id","window","location","assign","className","fill","viewBox","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","map","m","type","onClick","onSubmit","htmlFor","id","value","onChange","e","target","autoFocus","placeholder","disabled"],"mappings":"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"}
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/dR3GSMnwa4k46SIbP3PaK/_buildManifest.js",
|
|
11
|
+
"static/dR3GSMnwa4k46SIbP3PaK/_ssgManifest.js",
|
|
12
|
+
"static/dR3GSMnwa4k46SIbP3PaK/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0xrnwfefpke-g.js",
|