@sleep2agi/agent-network-dashboard 0.4.5-preview.41 โ†’ 0.4.5-preview.43

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.
Files changed (143) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +12 -12
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found.html +1 -1
  14. package/.next/server/app/_not-found.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  21. package/.next/server/app/admin.html +1 -1
  22. package/.next/server/app/admin.rsc +1 -1
  23. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  29. package/.next/server/app/index.html +1 -1
  30. package/.next/server/app/index.rsc +1 -1
  31. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  32. package/.next/server/app/index.segments/_full.segment.rsc +1 -1
  33. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/.next/server/app/login.html +1 -1
  37. package/.next/server/app/login.rsc +1 -1
  38. package/.next/server/app/login.segments/_full.segment.rsc +1 -1
  39. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  40. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  44. package/.next/server/app/logs.html +1 -1
  45. package/.next/server/app/logs.rsc +1 -1
  46. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  52. package/.next/server/app/messages.html +1 -1
  53. package/.next/server/app/messages.rsc +1 -1
  54. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  55. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  60. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  61. package/.next/server/app/node.html +2 -2
  62. package/.next/server/app/node.rsc +2 -2
  63. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  64. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  69. package/.next/server/app/nodes.html +1 -1
  70. package/.next/server/app/nodes.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  76. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  77. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  78. package/.next/server/app/server-logs.html +2 -2
  79. package/.next/server/app/server-logs.rsc +2 -2
  80. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  81. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +2 -2
  85. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  86. package/.next/server/app/settings/networks.html +1 -1
  87. package/.next/server/app/settings/networks.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  94. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  95. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  96. package/.next/server/app/settings/tokens.html +1 -1
  97. package/.next/server/app/settings/tokens.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  104. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  105. package/.next/server/app/settings.html +2 -2
  106. package/.next/server/app/settings.rsc +2 -2
  107. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  108. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  111. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  112. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/tasks.html +1 -1
  114. package/.next/server/app/tasks.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  120. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  121. package/.next/server/chunks/ssr/[root-of-the-server]__02ee4km._.js +1 -1
  122. package/.next/server/chunks/ssr/[root-of-the-server]__02ee4km._.js.map +1 -1
  123. package/.next/server/chunks/ssr/app_0dk5wao._.js +1 -1
  124. package/.next/server/chunks/ssr/app_0dk5wao._.js.map +1 -1
  125. package/.next/server/chunks/ssr/app_server-logs_page_tsx_0_kpp1p._.js +1 -1
  126. package/.next/server/chunks/ssr/app_server-logs_page_tsx_0_kpp1p._.js.map +1 -1
  127. package/.next/server/middleware-build-manifest.js +3 -3
  128. package/.next/server/pages/404.html +1 -1
  129. package/.next/server/pages/500.html +1 -1
  130. package/.next/server/server-reference-manifest.js +1 -1
  131. package/.next/server/server-reference-manifest.json +1 -1
  132. package/.next/static/chunks/{11_n-vjzf735y.js โ†’ 0d~5vxe9w9fqb.js} +1 -1
  133. package/.next/static/chunks/0l2rkodu2.v~r.js +1 -0
  134. package/.next/static/chunks/{0csmku~3y472t.js โ†’ 12hyhrnzrx~ys.js} +1 -1
  135. package/.next/trace +2 -2
  136. package/.next/trace-build +1 -1
  137. package/app/node/page.tsx +16 -10
  138. package/app/server-logs/page.tsx +33 -9
  139. package/package.json +1 -1
  140. package/.next/static/chunks/0qnpc7rbxn12u.js +0 -1
  141. /package/.next/static/{t8ckUU0UVyOpv2ymrRHll โ†’ qDwP55ctBDNlKJqyw52cp}/_buildManifest.js +0 -0
  142. /package/.next/static/{t8ckUU0UVyOpv2ymrRHll โ†’ qDwP55ctBDNlKJqyw52cp}/_clientMiddlewareManifest.js +0 -0
  143. /package/.next/static/{t8ckUU0UVyOpv2ymrRHll โ†’ qDwP55ctBDNlKJqyw52cp}/_ssgManifest.js +0 -0
@@ -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 lg:shadow-none
12
- "><a class="block px-4 py-4 flex items-center gap-3 hover:bg-[#11112a]/40 transition-colors rounded-r-xl" aria-label="Agent Network โ€” home" href="/"><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true" class="shrink-0"><circle cx="16" cy="16" r="10" fill="none" stroke="currentColor" stroke-width="1.5" opacity="0.2" class="text-cyan-400"></circle><line x1="16" y1="10" x2="10" y2="20" stroke="currentColor" stroke-width="1" opacity="0.45" class="text-cyan-400"></line><line x1="16" y1="10" x2="22" y2="20" stroke="currentColor" stroke-width="1" opacity="0.45" class="text-cyan-400"></line><line x1="10" y1="20" x2="22" y2="20" stroke="currentColor" stroke-width="1" opacity="0.45" class="text-cyan-400"></line><circle cx="16" cy="10" r="2.5" fill="currentColor" class="text-cyan-400"></circle><circle cx="10" cy="20" r="2.5" fill="currentColor" class="text-green-400"></circle><circle cx="22" cy="20" r="2.5" fill="currentColor" class="text-violet-400"></circle></svg><div class="min-w-0"><div class="text-white text-[13px] font-semibold leading-tight">Agent Network</div><div class="text-[10px] text-gray-500 flex items-center gap-1.5 mt-0.5"><span class="inline-block w-1.5 h-1.5 rounded-full bg-gray-600" aria-hidden="true"></span><span>waiting for agents</span></div></div></a><div class="border-b border-[#2a2a4a]"></div><div class="pb-20"><nav class="flex flex-col gap-1 px-2 py-4"><a class="relative 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="relative 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 anet-nav-active " 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="relative 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="relative 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="relative 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="relative 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="relative 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="relative 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="relative 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 text-[11px] text-gray-600 hover:text-gray-400 hover:bg-[#1a1a2a] transition-colors justify-between gap-2 px-5 py-2" aria-label="Open command palette"><span class="flex items-center gap-2"><svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>Quick search</span><kbd class="text-[10px] border border-current rounded px-1 py-0.5 opacity-60 font-mono">โŒ˜K</kbd></button><button class="w-full flex items-center text-xs text-gray-500 hover:text-red-400 hover:bg-red-500/5 transition-colors gap-3 px-5 py-3"><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 title="Collapse sidebar" 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 flex flex-col"><div 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><!--/$--><!--$--><!--/$--></div></main></div><script src="/_next/static/chunks/0e-.zgw81gela.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/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"ThemeProvider\"]\n3:I[58963,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"NetworkProvider\"]\n4:I[25045,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"AppShell\"]\n5:I[39756,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"default\"]\n7:I[47257,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"ClientPageRoot\"]\n8:I[96527,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\",\"/_next/static/chunks/0xdl435t_mf1c.js\"],\"default\"]\nb:I[97367,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"OutletBoundary\"]\nc:\"$Sreact.suspense\"\nf:I[97367,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"ViewportBoundary\"]\n11:I[97367,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"MetadataBoundary\"]\n13:I[68027,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0qe_pfeioih-5.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/0qe_pfeioih-5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/14bsg3_-taiw4.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0w1zwt8kq_7nb.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/0xdl435t_mf1c.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/0qe_pfeioih-5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"t8ckUU0UVyOpv2ymrRHll\"}\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/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.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
+ "><a class="block px-4 py-4 flex items-center gap-3 hover:bg-[#11112a]/40 transition-colors rounded-r-xl" aria-label="Agent Network โ€” home" href="/"><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true" class="shrink-0"><circle cx="16" cy="16" r="10" fill="none" stroke="currentColor" stroke-width="1.5" opacity="0.2" class="text-cyan-400"></circle><line x1="16" y1="10" x2="10" y2="20" stroke="currentColor" stroke-width="1" opacity="0.45" class="text-cyan-400"></line><line x1="16" y1="10" x2="22" y2="20" stroke="currentColor" stroke-width="1" opacity="0.45" class="text-cyan-400"></line><line x1="10" y1="20" x2="22" y2="20" stroke="currentColor" stroke-width="1" opacity="0.45" class="text-cyan-400"></line><circle cx="16" cy="10" r="2.5" fill="currentColor" class="text-cyan-400"></circle><circle cx="10" cy="20" r="2.5" fill="currentColor" class="text-green-400"></circle><circle cx="22" cy="20" r="2.5" fill="currentColor" class="text-violet-400"></circle></svg><div class="min-w-0"><div class="text-white text-[13px] font-semibold leading-tight">Agent Network</div><div class="text-[10px] text-gray-500 flex items-center gap-1.5 mt-0.5"><span class="inline-block w-1.5 h-1.5 rounded-full bg-gray-600" aria-hidden="true"></span><span>waiting for agents</span></div></div></a><div class="border-b border-[#2a2a4a]"></div><div class="pb-20"><nav class="flex flex-col gap-1 px-2 py-4"><a class="relative 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="relative 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 anet-nav-active " 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="relative 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="relative 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="relative 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="relative 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="relative 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="relative 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="relative 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 text-[11px] text-gray-600 hover:text-gray-400 hover:bg-[#1a1a2a] transition-colors justify-between gap-2 px-5 py-2" aria-label="Open command palette"><span class="flex items-center gap-2"><svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>Quick search</span><kbd class="text-[10px] border border-current rounded px-1 py-0.5 opacity-60 font-mono">โŒ˜K</kbd></button><button class="w-full flex items-center text-xs text-gray-500 hover:text-red-400 hover:bg-red-500/5 transition-colors gap-3 px-5 py-3"><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 title="Collapse sidebar" 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 flex flex-col"><div 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><!--/$--><!--$--><!--/$--></div></main></div><script src="/_next/static/chunks/0e-.zgw81gela.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/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"ThemeProvider\"]\n3:I[58963,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"NetworkProvider\"]\n4:I[25045,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"AppShell\"]\n5:I[39756,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"default\"]\n7:I[47257,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"ClientPageRoot\"]\n8:I[96527,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\",\"/_next/static/chunks/0xdl435t_mf1c.js\"],\"default\"]\nb:I[97367,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"OutletBoundary\"]\nc:\"$Sreact.suspense\"\nf:I[97367,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"ViewportBoundary\"]\n11:I[97367,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"MetadataBoundary\"]\n13:I[68027,[\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0qe_pfeioih-5.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/0qe_pfeioih-5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0~n.cadw9_e8s.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/14bsg3_-taiw4.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0w1zwt8kq_7nb.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/0xdl435t_mf1c.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/0qe_pfeioih-5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"qDwP55ctBDNlKJqyw52cp\"}\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/0~n.cadw9_e8s.js\",\"/_next/static/chunks/14bsg3_-taiw4.js\",\"/_next/static/chunks/0w1zwt8kq_7nb.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>
@@ -13,7 +13,7 @@ f:I[97367,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_
13
13
  13:I[68027,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.js"],"default",1]
14
14
  :HL["/_next/static/chunks/0qe_pfeioih-5.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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0~n.cadw9_e8s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/0w1zwt8kq_7nb.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/0xdl435t_mf1c.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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"t8ckUU0UVyOpv2ymrRHll"}
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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0~n.cadw9_e8s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/0w1zwt8kq_7nb.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/0xdl435t_mf1c.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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"qDwP55ctBDNlKJqyw52cp"}
17
17
  14:[]
18
18
  e:"$W14"
19
19
  9:{}
@@ -13,7 +13,7 @@ f:I[97367,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_
13
13
  13:I[68027,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.js"],"default",1]
14
14
  :HL["/_next/static/chunks/0qe_pfeioih-5.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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0~n.cadw9_e8s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/0w1zwt8kq_7nb.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/0xdl435t_mf1c.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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"t8ckUU0UVyOpv2ymrRHll"}
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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0~n.cadw9_e8s.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/0w1zwt8kq_7nb.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/0xdl435t_mf1c.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/0qe_pfeioih-5.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"qDwP55ctBDNlKJqyw52cp"}
17
17
  14:[]
18
18
  e:"$W14"
19
19
  9:{}
@@ -3,4 +3,4 @@
3
3
  3:I[97367,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.js"],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
5
  5:I[27201,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.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":"t8ckUU0UVyOpv2ymrRHll"}
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":"qDwP55ctBDNlKJqyw52cp"}
@@ -5,4 +5,4 @@
5
5
  5:I[39756,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.js"],"default"]
6
6
  6:I[37457,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.js"],"default"]
7
7
  :HL["/_next/static/chunks/0qe_pfeioih-5.css","style"]
8
- 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0qe_pfeioih-5.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0~n.cadw9_e8s.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/0w1zwt8kq_7nb.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":"t8ckUU0UVyOpv2ymrRHll"}
8
+ 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0qe_pfeioih-5.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0~n.cadw9_e8s.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/14bsg3_-taiw4.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/0w1zwt8kq_7nb.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":"qDwP55ctBDNlKJqyw52cp"}
@@ -1,3 +1,3 @@
1
1
  :HL["/_next/static/chunks/0qe_pfeioih-5.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":"t8ckUU0UVyOpv2ymrRHll"}
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":"qDwP55ctBDNlKJqyw52cp"}
@@ -3,7 +3,7 @@
3
3
  3:I[96527,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.js","/_next/static/chunks/0xdl435t_mf1c.js"],"default"]
4
4
  6:I[97367,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.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/0xdl435t_mf1c.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"t8ckUU0UVyOpv2ymrRHll"}
6
+ 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0xdl435t_mf1c.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"qDwP55ctBDNlKJqyw52cp"}
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/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.js"],"default"]
3
3
  3:I[37457,["/_next/static/chunks/0~n.cadw9_e8s.js","/_next/static/chunks/14bsg3_-taiw4.js","/_next/static/chunks/0w1zwt8kq_7nb.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":"t8ckUU0UVyOpv2ymrRHll"}
5
+ 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"qDwP55ctBDNlKJqyw52cp"}
@@ -1,3 +1,3 @@
1
- module.exports=[50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},43515,a=>{"use strict";a.s(["formatUptime",0,function(a){let b=Math.floor(a/3600),c=Math.floor(a%3600/60);return b>0?`${b}h ${c}m`:`${c}m`},"timeAgo",0,function(a){if(!a)return"--";let b=Math.floor((Date.now()-new Date(a.replace(" ","T")+"Z").getTime())/1e3);return b<60?`${b}s ago`:b<3600?`${Math.floor(b/60)}m ago`:b<86400?`${Math.floor(b/3600)}h ago`:`${Math.floor(b/86400)}d ago`}])},1720,a=>{"use strict";var b=a.i(87924);let c=[180,200,220,270,300,330,30,90];a.s(["AliasAvatar",0,function({alias:a,size:d=28,className:e=""}){let f=function(a){let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)>>>0;let d=c[b%c.length];return{bg:`hsl(${d} 55% 22%)`,ring:`hsl(${d} 60% 45%)`,text:`hsl(${d} 80% 78%)`}}(a),g=Math.max(9,Math.round(.42*d));return(0,b.jsx)("span",{className:`anet-alias-avatar inline-flex items-center justify-center rounded-full border shrink-0 font-semibold ${e}`,style:{width:d,height:d,fontSize:g,backgroundColor:f.bg,borderColor:f.ring,color:f.text},title:a,"aria-hidden":!0,children:a?(a.trim().match(/[\p{L}\p{N}]/u)?.[0]||a.trim()[0]||"ยท").toUpperCase():"ยท"})}])},35131,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(38246),f=a.i(15261),g=a.i(43515),h=a.i(1720);function i({tmuxName:a}){let[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(!1),[h,j]=(0,c.useState)(!1),k=async()=>{g(!0);try{let b=await fetch(`/api/hub/tmux?name=${encodeURIComponent(a)}`),c=await b.json();e(c.output||c.error||"No output")}catch{e("Failed to fetch")}g(!1)};return(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsxs)("h2",{className:"text-sm font-semibold text-gray-300",children:["Terminal (",a,")"]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("button",{onClick:k,disabled:f,className:"text-xs text-cyan-400 hover:text-cyan-300 disabled:text-gray-600",children:f?"Loading...":"Capture"}),d&&(0,b.jsx)("button",{onClick:()=>j(!h),className:"text-xs text-gray-500 hover:text-gray-300",children:h?"Collapse":"Expand"})]})]}),d&&(0,b.jsx)("pre",{className:`text-[11px] text-green-300 bg-[#050510] rounded-lg px-3 py-2 border border-[#1a1a2a] overflow-x-auto whitespace-pre font-mono ${h?"max-h-96":"max-h-32"} overflow-y-auto`,children:d}),!d&&(0,b.jsx)("p",{className:"text-xs text-gray-600",children:"Click Capture to view terminal output"})]})}function j(){let a=(0,d.useSearchParams)().get("alias")||"",[f,g]=(0,c.useState)(null),[i,j]=(0,c.useState)([]),[l,m]=(0,c.useState)(0),[n,o]=(0,c.useState)(""),[p,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(!1),t=(0,c.useCallback)(async()=>{if(a)try{let b=await fetch(`/api/hub/session?alias=${encodeURIComponent(a)}`),c=await b.json();c.session&&g(c.session),c.inbox&&j(c.inbox),m(c.sse||0),o("")}catch(a){o(a instanceof Error?a.message:"fetch failed")}},[a]);(0,c.useEffect)(()=>{t();let a=setInterval(t,5e3);return()=>clearInterval(a)},[t]);let[u,v]=(0,c.useState)(""),w=async()=>{if(p.trim()&&a){s(!0),v("");try{let b=await fetch("/api/hub/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({alias:a,task:p})}),c=await b.json();c.ok?(q(""),setTimeout(t,2e3)):v(c.error||"Send failed")}catch(a){v(a instanceof Error?a.message:"Send failed")}s(!1)}};if(!a)return(0,b.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono flex items-center justify-center",children:(0,b.jsxs)("p",{className:"text-gray-500",children:["No alias specified. ",(0,b.jsx)(e.default,{href:"/",className:"text-blue-400 hover:underline",children:"Back to dashboard"})]})});let x=f?.status==="working"?"text-green-400":f?.status==="idle"?"text-blue-400":"text-gray-500";return(0,b.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 mb-6 lg:ml-0 ml-10",children:[(0,b.jsx)(e.default,{href:"/nodes",className:"text-gray-500 hover:text-gray-300 text-sm shrink-0",children:"โ† Nodes"}),(0,b.jsx)(h.AliasAvatar,{alias:a,size:32}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("h1",{className:"text-xl sm:text-2xl font-bold text-white truncate",children:a}),(0,b.jsx)("span",{className:`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${l>0?f?.status==="working"?"bg-green-500 animate-pulse":"bg-emerald-400":"bg-gray-500"}`}),(0,b.jsx)("span",{className:`text-[10px] uppercase tracking-wide font-semibold ${x}`,children:f?.status||"unknown"})]}),f?.agent&&(0,b.jsxs)("div",{className:"text-xs text-gray-500 truncate",children:[f.agent,f.server?(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)("span",{className:"text-gray-700 mx-1",children:"ยท"})," ",f.server]}):null]})]})]}),n&&(0,b.jsx)("div",{className:"bg-red-900/20 border border-red-800/40 text-red-300 px-4 py-2 rounded-lg mb-6 text-sm",children:n}),(0,b.jsx)(k,{alias:a,session:f,sse:l,sendMsg:p,setSendMsg:q,sending:r,sendTask:w,sendError:u})]})}function k({alias:a,session:d,sse:e,sendMsg:g,setSendMsg:h,sending:j,sendTask:l,sendError:n}){let[o,p]=(0,c.useState)("chat"),[q,r]=(0,c.useState)([]),[s,t]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{"events"!==o||s||fetch("/api/hub/task-events?limit=50").then(a=>a.json()).then(a=>{r(a.events||[]),t(!0)}).catch(()=>t(!0))},[o,s]),(0,b.jsxs)("div",{className:"bg-[#0d0d1a] border border-[#2a2a4a] rounded-xl overflow-hidden h-[calc(100vh-140px)] flex flex-col",children:[(0,b.jsx)("div",{className:"flex border-b border-[#2a2a4a] bg-[#0a0a15] shrink-0",children:[{id:"chat",label:"Chat",icon:"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"},{id:"events",label:"Events",icon:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8"},{id:"info",label:"Info",icon:"M12 21a9 9 0 100-18 9 9 0 000 18z M12 8h.01 M11 12h1v4h1"}].map(a=>(0,b.jsxs)("button",{onClick:()=>p(a.id),className:`flex items-center gap-2 px-5 py-3 text-sm font-medium border-b-2 transition-colors ${o===a.id?"border-cyan-400 text-cyan-300":"border-transparent text-gray-500 hover:text-gray-300"}`,children:[(0,b.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:a.icon})}),(0,b.jsx)("span",{children:a.label})]},a.id))}),(0,b.jsxs)("div",{className:"flex-1 overflow-hidden",children:["chat"===o&&(0,b.jsx)(f.TaskChatPanel,{alias:a,onClose:()=>{},inline:!0}),"events"===o&&(0,b.jsx)(m,{events:q,loading:!s}),"info"===o&&(0,b.jsxs)("div",{className:"p-4 overflow-y-auto h-full space-y-4 max-w-2xl",children:[(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Node Info"}),(0,b.jsx)("div",{className:"space-y-2 text-xs",children:[{label:"Node ID",value:d?.node_id,alwaysShow:!0},{label:"Session ID",value:d?.session_id,alwaysShow:!0},{label:"Resume ID",value:d?.resume_id,alwaysShow:!0},{label:"Alias",value:d?.alias,alwaysShow:!0},{label:"Agent",value:d?.agent,alwaysShow:!0},{label:"Model",value:d?.model,alwaysShow:!0},{label:"Version",value:d?.version},{label:"Server",value:d?.server,alwaysShow:!0},{label:"Hostname",value:d?.hostname,alwaysShow:!0},{label:"IP",value:d?.ip,alwaysShow:!0},{label:"Project",value:d?.project_dir},{label:"Config",value:d?.config_path,alwaysShow:!0},{label:"Channels",value:d?.channels?.length?Array.isArray(d.channels)?d.channels.join(", "):d.channels:null,alwaysShow:!0},{label:"Tmux",value:d?.tmux_name},{label:"SSE",value:e>0?`Connected (${e})`:"Disconnected",alwaysShow:!0},{label:"Progress",value:d?.progress?`${d.progress}%`:null},{label:"Score",value:d?.score},{label:"Last Seen",value:d?.last_seen_at,alwaysShow:!0},{label:"Registered",value:d?.registered_at,alwaysShow:!0},{label:"Updated",value:d?.updated_at,alwaysShow:!0}].map(({label:a,value:c,alwaysShow:d})=>c||d?(0,b.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,b.jsx)("span",{className:"text-gray-500 shrink-0",children:a}),(0,b.jsx)("span",{className:"text-gray-300 truncate max-w-[200px]",title:c?String(c):"--",children:c?String(c):"--"})]},a):null)})]}),d?.task&&(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Current Task"}),(0,b.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap",children:d.task})]}),d?.output&&(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Last Output"}),(0,b.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap max-h-48 overflow-y-auto",children:d.output})]}),(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Send Task"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("input",{type:"text",value:g,onChange:a=>h(a.target.value),onKeyDown:a=>"Enter"===a.key&&l(),placeholder:`Send task to ${a}...`,className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-blue-500 focus:outline-none"}),(0,b.jsx)("button",{onClick:l,disabled:j||!g.trim(),className:"px-3 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-700 text-white text-xs rounded transition-colors",children:j?"...":"Send"})]}),n&&(0,b.jsx)("div",{className:"mt-2 text-xs text-red-400",children:n})]}),d?.tmux_name&&(0,b.jsx)(i,{tmuxName:d.tmux_name})]})]})]})}let l={delivered:{dot:"bg-blue-400",line:"bg-blue-500/30",icon:"๐Ÿ“ฌ"},acked:{dot:"bg-yellow-400",line:"bg-yellow-500/30",icon:"โœ…"},running:{dot:"bg-green-400",line:"bg-green-500/30",icon:"โšก"},replied:{dot:"bg-purple-400",line:"bg-purple-500/30",icon:"๐Ÿ’ฌ"},failed:{dot:"bg-red-400",line:"bg-red-500/30",icon:"โŒ"},created:{dot:"bg-gray-400",line:"bg-gray-500/30",icon:"๐Ÿ“"}};function m({events:a,loading:c}){if(c)return(0,b.jsx)("div",{className:"flex justify-center py-8",children:(0,b.jsx)("div",{className:"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin"})});if(0===a.length)return(0,b.jsx)("div",{className:"text-center py-12 text-gray-600 text-xs",children:"No task events yet"});let d=new Map;return a.forEach(a=>{let b=a.task_id||`ungrouped-${a.id}`,c=d.get(b)||[];c.push(a),d.set(b,c)}),(0,b.jsx)("div",{className:"p-4 overflow-y-auto h-full space-y-4",children:[...d.entries()].map(([a,c])=>(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsxs)("div",{className:"text-[10px] text-gray-600 mb-3 truncate",children:["Task: ",a.slice(0,20),"..."]}),(0,b.jsxs)("div",{className:"relative pl-6",children:[(0,b.jsx)("div",{className:"absolute left-[9px] top-2 bottom-2 w-0.5 bg-[#1a1a2a]"}),c.map((a,c)=>{let d=l[a.to_status]||l.created;return(0,b.jsxs)("div",{className:"relative pb-4 last:pb-0",children:[(0,b.jsx)("div",{className:`absolute -left-6 top-0.5 w-[18px] h-[18px] rounded-full ${d.dot} flex items-center justify-center text-[9px] z-10 border-2 border-[#111128]`,children:d.icon.length<=2?d.icon:""}),(0,b.jsxs)("div",{className:"ml-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:`text-xs font-medium ${"failed"===a.to_status?"text-red-400":"replied"===a.to_status?"text-purple-400":"text-gray-300"}`,children:a.event_type}),a.from_status&&(0,b.jsxs)("span",{className:"text-[10px] text-gray-600",children:[a.from_status," โ†’ ",a.to_status]}),(0,b.jsx)("span",{className:"text-[10px] text-gray-600 ml-auto",children:(0,g.timeAgo)(a.created_at)})]}),a.detail&&(0,b.jsxs)("div",{className:"text-[11px] text-gray-500 mt-0.5 truncate",children:[a.detail.slice(0,50),a.detail.length>50?"...":""]})]})]},a.id)})]})]},a))})}a.s(["default",0,function(){return(0,b.jsx)(c.Suspense,{fallback:(0,b.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono",children:"Loading..."}),children:(0,b.jsx)(j,{})})}])}];
1
+ module.exports=[50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},43515,a=>{"use strict";a.s(["formatUptime",0,function(a){let b=Math.floor(a/3600),c=Math.floor(a%3600/60);return b>0?`${b}h ${c}m`:`${c}m`},"timeAgo",0,function(a){if(!a)return"--";let b=Math.floor((Date.now()-new Date(a.replace(" ","T")+"Z").getTime())/1e3);return b<60?`${b}s ago`:b<3600?`${Math.floor(b/60)}m ago`:b<86400?`${Math.floor(b/3600)}h ago`:`${Math.floor(b/86400)}d ago`}])},1720,a=>{"use strict";var b=a.i(87924);let c=[180,200,220,270,300,330,30,90];a.s(["AliasAvatar",0,function({alias:a,size:d=28,className:e=""}){let f=function(a){let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)>>>0;let d=c[b%c.length];return{bg:`hsl(${d} 55% 22%)`,ring:`hsl(${d} 60% 45%)`,text:`hsl(${d} 80% 78%)`}}(a),g=Math.max(9,Math.round(.42*d));return(0,b.jsx)("span",{className:`anet-alias-avatar inline-flex items-center justify-center rounded-full border shrink-0 font-semibold ${e}`,style:{width:d,height:d,fontSize:g,backgroundColor:f.bg,borderColor:f.ring,color:f.text},title:a,"aria-hidden":!0,children:a?(a.trim().match(/[\p{L}\p{N}]/u)?.[0]||a.trim()[0]||"ยท").toUpperCase():"ยท"})}])},35131,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(38246),f=a.i(15261),g=a.i(43515),h=a.i(1720);function i({tmuxName:a}){let[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(!1),[h,j]=(0,c.useState)(!1),k=async()=>{g(!0);try{let b=await fetch(`/api/hub/tmux?name=${encodeURIComponent(a)}`),c=await b.json();e(c.output||c.error||"No output")}catch{e("Failed to fetch")}g(!1)};return(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsxs)("h2",{className:"text-sm font-semibold text-gray-300",children:["Terminal (",a,")"]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("button",{onClick:k,disabled:f,className:"text-xs text-cyan-400 hover:text-cyan-300 disabled:text-gray-600",children:f?"Loading...":"Capture"}),d&&(0,b.jsx)("button",{onClick:()=>j(!h),className:"text-xs text-gray-500 hover:text-gray-300",children:h?"Collapse":"Expand"})]})]}),d&&(0,b.jsx)("pre",{className:`text-[11px] text-green-300 bg-[#050510] rounded-lg px-3 py-2 border border-[#1a1a2a] overflow-x-auto whitespace-pre font-mono ${h?"max-h-96":"max-h-32"} overflow-y-auto`,children:d}),!d&&(0,b.jsx)("p",{className:"text-xs text-gray-600",children:"Click Capture to view terminal output"})]})}function j(){let a=(0,d.useSearchParams)().get("alias")||"",[f,g]=(0,c.useState)(null),[i,j]=(0,c.useState)([]),[l,m]=(0,c.useState)(0),[n,o]=(0,c.useState)(""),[p,q]=(0,c.useState)(""),[r,s]=(0,c.useState)(!1),t=(0,c.useCallback)(async()=>{if(a)try{let b=await fetch(`/api/hub/session?alias=${encodeURIComponent(a)}`),c=await b.json();c.session&&g(c.session),c.inbox&&j(c.inbox),m(c.sse||0),o("")}catch(a){o(a instanceof Error?a.message:"fetch failed")}},[a]);(0,c.useEffect)(()=>{t();let a=setInterval(t,5e3);return()=>clearInterval(a)},[t]);let[u,v]=(0,c.useState)(""),w=async()=>{if(p.trim()&&a){s(!0),v("");try{let b=await fetch("/api/hub/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({alias:a,task:p})}),c=await b.json();c.ok?(q(""),setTimeout(t,2e3)):v(c.error||"Send failed")}catch(a){v(a instanceof Error?a.message:"Send failed")}s(!1)}};if(!a)return(0,b.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono flex items-center justify-center",children:(0,b.jsxs)("p",{className:"text-gray-500",children:["No alias specified. ",(0,b.jsx)(e.default,{href:"/",className:"text-blue-400 hover:underline",children:"Back to dashboard"})]})});let x=f?.status==="working"?"text-green-400":f?.status==="idle"?"text-blue-400":"text-gray-500";return(0,b.jsxs)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 mb-6 lg:ml-0 ml-10",children:[(0,b.jsx)(e.default,{href:"/nodes",className:"text-gray-500 hover:text-gray-300 text-sm shrink-0",children:"โ† Nodes"}),(0,b.jsx)(h.AliasAvatar,{alias:a,size:32}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("h1",{className:"text-xl sm:text-2xl font-bold text-white truncate",children:a}),(0,b.jsx)("span",{className:`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${l>0?f?.status==="working"?"bg-green-500 animate-pulse":"bg-emerald-400":"bg-gray-500"}`}),(0,b.jsx)("span",{className:`text-[10px] uppercase tracking-wide font-semibold ${x}`,children:f?.status||"unknown"})]}),f?.agent&&(0,b.jsxs)("div",{className:"text-xs text-gray-500 truncate",children:[f.agent,f.server?(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)("span",{className:"text-gray-700 mx-1",children:"ยท"})," ",f.server]}):null]})]})]}),n&&(0,b.jsx)("div",{className:"bg-red-900/20 border border-red-800/40 text-red-300 px-4 py-2 rounded-lg mb-6 text-sm",children:n}),(0,b.jsx)(k,{alias:a,session:f,sse:l,sendMsg:p,setSendMsg:q,sending:r,sendTask:w,sendError:u})]})}function k({alias:a,session:d,sse:e,sendMsg:g,setSendMsg:h,sending:j,sendTask:l,sendError:n}){let[o,p]=(0,c.useState)("chat"),[q,r]=(0,c.useState)([]),[s,t]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{"events"!==o||s||fetch("/api/hub/task-events?limit=50").then(a=>a.json()).then(a=>{r(a.events||[]),t(!0)}).catch(()=>t(!0))},[o,s]),(0,b.jsxs)("div",{className:"bg-[#0d0d1a] border border-[#2a2a4a] rounded-xl overflow-hidden h-[calc(100vh-140px)] flex flex-col",children:[(0,b.jsx)("div",{className:"flex border-b border-[#2a2a4a] bg-[#0a0a15] shrink-0",children:[{id:"chat",label:"Chat",icon:"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"},{id:"events",label:"Events",icon:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8"},{id:"info",label:"Info",icon:"M12 21a9 9 0 100-18 9 9 0 000 18z M12 8h.01 M11 12h1v4h1"}].map(a=>(0,b.jsxs)("button",{onClick:()=>p(a.id),className:`flex items-center gap-2 px-5 py-3 text-sm font-medium border-b-2 transition-colors ${o===a.id?"border-cyan-400 text-cyan-300":"border-transparent text-gray-500 hover:text-gray-300"}`,children:[(0,b.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,b.jsx)("path",{d:a.icon})}),(0,b.jsx)("span",{children:a.label})]},a.id))}),(0,b.jsxs)("div",{className:"flex-1 overflow-hidden",children:["chat"===o&&(0,b.jsx)(f.TaskChatPanel,{alias:a,onClose:()=>{},inline:!0}),"events"===o&&(0,b.jsx)(m,{events:q,loading:!s}),"info"===o&&(0,b.jsxs)("div",{className:"p-4 overflow-y-auto h-full space-y-4 max-w-2xl",children:[(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-3",children:"Node Info"}),(0,b.jsx)("div",{className:"space-y-2 text-xs",children:[{label:"Node ID",value:d?.node_id,alwaysShow:!0},{label:"Session ID",value:d?.session_id,alwaysShow:!0},{label:"Resume ID",value:d?.resume_id,alwaysShow:!0},{label:"Alias",value:d?.alias,alwaysShow:!0},{label:"Agent",value:d?.agent,alwaysShow:!0},{label:"Model",value:d?.model,alwaysShow:!0},{label:"Version",value:d?.version},{label:"Server",value:d?.server,alwaysShow:!0},{label:"Hostname",value:d?.hostname,alwaysShow:!0},{label:"IP",value:d?.ip,alwaysShow:!0},{label:"Project",value:d?.project_dir},{label:"Config",value:d?.config_path,alwaysShow:!0},{label:"Channels",value:d?.channels?.length?Array.isArray(d.channels)?d.channels.join(", "):d.channels:null,alwaysShow:!0},{label:"Tmux",value:d?.tmux_name},{label:"SSE",value:e>0?`Connected (${e})`:"Disconnected",alwaysShow:!0},{label:"Progress",value:d?.progress?`${d.progress}%`:null},{label:"Score",value:d?.score},{label:"Last Seen",value:d?.last_seen_at,alwaysShow:!0},{label:"Registered",value:d?.registered_at,alwaysShow:!0},{label:"Updated",value:d?.updated_at,alwaysShow:!0}].map(({label:a,value:c,alwaysShow:d})=>c||d?(0,b.jsxs)("div",{className:"flex justify-between gap-3",children:[(0,b.jsx)("span",{className:"text-gray-500 shrink-0",children:a}),(0,b.jsx)("span",{className:"text-gray-300 truncate max-w-[200px]",title:c?String(c):"--",children:c?String(c):"--"})]},a):null)})]}),d?.task&&(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Current Task"}),(0,b.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap",children:d.task})]}),d?.output&&(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Last Output"}),(0,b.jsx)("p",{className:"text-xs text-gray-400 whitespace-pre-wrap max-h-48 overflow-y-auto",children:d.output})]}),(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsx)("h2",{className:"text-sm font-semibold text-gray-300 mb-2",children:"Send Task"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("input",{type:"text",value:g,onChange:a=>h(a.target.value),onKeyDown:a=>"Enter"===a.key&&l(),placeholder:`Send task to ${a}...`,className:"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-blue-500 focus:outline-none"}),(0,b.jsx)("button",{onClick:l,disabled:j||!g.trim(),className:"px-3 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-700 text-white text-xs rounded transition-colors",children:j?"...":"Send"})]}),n&&(0,b.jsx)("div",{className:"mt-2 text-xs text-red-400",children:n})]}),d?.tmux_name&&(0,b.jsx)(i,{tmuxName:d.tmux_name})]})]})]})}let l={delivered:{dot:"bg-blue-400",line:"bg-blue-500/30",path:"M12 5v14 M5 12l7 7 7-7"},acked:{dot:"bg-yellow-400",line:"bg-yellow-500/30",path:"M20 6 9 17l-5-5"},running:{dot:"bg-green-400",line:"bg-green-500/30",path:"M13 2L4 14h6l-1 8 10-12h-6l1-8z"},replied:{dot:"bg-purple-400",line:"bg-purple-500/30",path:"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"},failed:{dot:"bg-red-400",line:"bg-red-500/30",path:"M18 6 6 18 M6 6l12 12"},created:{dot:"bg-gray-400",line:"bg-gray-500/30",path:"M12 5v14 M5 12h14"}};function m({events:a,loading:c}){if(c)return(0,b.jsx)("div",{className:"flex justify-center py-8",children:(0,b.jsx)("div",{className:"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin"})});if(0===a.length)return(0,b.jsx)("div",{className:"text-center py-12 text-gray-600 text-xs",children:"No task events yet"});let d=new Map;return a.forEach(a=>{let b=a.task_id||`ungrouped-${a.id}`,c=d.get(b)||[];c.push(a),d.set(b,c)}),(0,b.jsx)("div",{className:"p-4 overflow-y-auto h-full space-y-4",children:[...d.entries()].map(([a,c])=>(0,b.jsxs)("div",{className:"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4",children:[(0,b.jsxs)("div",{className:"text-[10px] text-gray-600 mb-3 truncate",children:["Task: ",a.slice(0,20),"..."]}),(0,b.jsxs)("div",{className:"relative pl-6",children:[(0,b.jsx)("div",{className:"absolute left-[9px] top-2 bottom-2 w-0.5 bg-[#1a1a2a]"}),c.map((a,c)=>{let d=l[a.to_status]||l.created;return(0,b.jsxs)("div",{className:"relative pb-4 last:pb-0",children:[(0,b.jsx)("div",{className:`absolute -left-6 top-0.5 w-[18px] h-[18px] rounded-full ${d.dot} flex items-center justify-center z-10 border-2 border-[#111128]`,children:(0,b.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"#0a0a15",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:(0,b.jsx)("path",{d:d.path})})}),(0,b.jsxs)("div",{className:"ml-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:`text-xs font-medium ${"failed"===a.to_status?"text-red-400":"replied"===a.to_status?"text-purple-400":"text-gray-300"}`,children:a.event_type}),a.from_status&&(0,b.jsxs)("span",{className:"text-[10px] text-gray-600",children:[a.from_status," โ†’ ",a.to_status]}),(0,b.jsx)("span",{className:"text-[10px] text-gray-600 ml-auto",children:(0,g.timeAgo)(a.created_at)})]}),a.detail&&(0,b.jsxs)("div",{className:"text-[11px] text-gray-500 mt-0.5 truncate",children:[a.detail.slice(0,50),a.detail.length>50?"...":""]})]})]},a.id)})]})]},a))})}a.s(["default",0,function(){return(0,b.jsx)(c.Suspense,{fallback:(0,b.jsx)("div",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono",children:"Loading..."}),children:(0,b.jsx)(j,{})})}])}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__02ee4km._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../app/components/utils.ts","../../../../app/components/AliasAvatar.tsx","../../../../app/node/page.tsx"],"sourcesContent":["export function timeAgo(dateStr: string): string {\n if (!dateStr) return '--';\n const diff = Date.now() - new Date(dateStr.replace(' ', 'T') + 'Z').getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return `${s}s ago`;\n if (s < 3600) return `${Math.floor(s / 60)}m ago`;\n if (s < 86400) return `${Math.floor(s / 3600)}h ago`;\n return `${Math.floor(s / 86400)}d ago`;\n}\n\nexport function statusColor(status: string, hasSse: boolean): string {\n if (hasSse && status === 'working') return 'bg-green-500';\n if (hasSse && status === 'idle') return 'bg-emerald-400';\n if (hasSse) return 'bg-blue-400';\n if (status === 'offline') return 'bg-gray-500';\n return 'bg-yellow-400';\n}\n\nexport function formatUptime(seconds: number): string {\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n return `${m}m`;\n}\n","/** Hue-hashed avatar pill for agent aliases. Same alias โ†’ same color across\n * every page (Messages, Nodes, TopoGraph). Use the `size` prop for inline\n * pills (16/20) vs card headers (28). Round 21 introduced the palette;\n * round 22 promotes it from app/messages to a shared component. */\n\nconst AVATAR_HUES = [180, 200, 220, 270, 300, 330, 30, 90];\n\nexport function aliasAvatarColors(alias: string): { bg: string; ring: string; text: string } {\n let h = 0;\n for (let i = 0; i < alias.length; i++) h = (h * 31 + alias.charCodeAt(i)) >>> 0;\n const hue = AVATAR_HUES[h % AVATAR_HUES.length];\n return {\n bg: `hsl(${hue} 55% 22%)`,\n ring: `hsl(${hue} 60% 45%)`,\n text: `hsl(${hue} 80% 78%)`,\n };\n}\n\nexport function aliasInitial(alias?: string): string {\n if (!alias) return 'ยท';\n const ch = alias.trim().match(/[\\p{L}\\p{N}]/u)?.[0] || alias.trim()[0] || 'ยท';\n return ch.toUpperCase();\n}\n\ninterface AliasAvatarProps {\n alias: string;\n size?: number;\n className?: string;\n}\n\nexport function AliasAvatar({ alias, size = 28, className = '' }: AliasAvatarProps) {\n const c = aliasAvatarColors(alias);\n const fs = Math.max(9, Math.round(size * 0.42));\n return (\n <span\n className={`anet-alias-avatar inline-flex items-center justify-center rounded-full border shrink-0 font-semibold ${className}`}\n style={{\n width: size,\n height: size,\n fontSize: fs,\n backgroundColor: c.bg,\n borderColor: c.ring,\n color: c.text,\n }}\n title={alias}\n aria-hidden\n >\n {aliasInitial(alias)}\n </span>\n );\n}\n","'use client';\n\nimport { useEffect, useState, useCallback } from 'react';\nimport { useSearchParams } from 'next/navigation';\nimport Link from 'next/link';\nimport { Suspense } from 'react';\nimport { TaskChatPanel } from '../components/TaskChatPanel';\nimport { timeAgo } from '../components/utils';\nimport { AliasAvatar } from '../components/AliasAvatar';\n\ninterface SessionDetail {\n resume_id: string;\n alias: string;\n status: string;\n agent: string;\n server: string;\n hostname: string;\n task: string;\n output: string;\n progress: number;\n score: number;\n registered_at: string;\n updated_at: string;\n project_dir: string;\n tmux_name: string;\n ip: string;\n node_id: string;\n session_id: string;\n config_path: string;\n channels: string[];\n last_seen_at: string;\n model: string;\n version: string;\n}\n\ninterface Message {\n id: string;\n content: string;\n from_session: string;\n priority: string;\n created_at: string;\n type: string;\n}\n\nfunction TmuxViewer({ tmuxName }: { tmuxName: string }) {\n const [output, setOutput] = useState('');\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n const fetchTmux = async () => {\n setLoading(true);\n try {\n const res = await fetch(`/api/hub/tmux?name=${encodeURIComponent(tmuxName)}`);\n const data = await res.json();\n setOutput(data.output || data.error || 'No output');\n } catch { setOutput('Failed to fetch'); }\n setLoading(false);\n };\n\n return (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <div className=\"flex items-center justify-between mb-2\">\n <h2 className=\"text-sm font-semibold text-gray-300\">Terminal ({tmuxName})</h2>\n <div className=\"flex gap-2\">\n <button onClick={fetchTmux} disabled={loading}\n className=\"text-xs text-cyan-400 hover:text-cyan-300 disabled:text-gray-600\">\n {loading ? 'Loading...' : 'Capture'}\n </button>\n {output && (\n <button onClick={() => setExpanded(!expanded)} className=\"text-xs text-gray-500 hover:text-gray-300\">\n {expanded ? 'Collapse' : 'Expand'}\n </button>\n )}\n </div>\n </div>\n {output && (\n <pre className={`text-[11px] text-green-300 bg-[#050510] rounded-lg px-3 py-2 border border-[#1a1a2a] overflow-x-auto whitespace-pre font-mono ${expanded ? 'max-h-96' : 'max-h-32'} overflow-y-auto`}>\n {output}\n </pre>\n )}\n {!output && <p className=\"text-xs text-gray-600\">Click Capture to view terminal output</p>}\n </div>\n );\n}\n\nfunction NodeDetailContent() {\n const searchParams = useSearchParams();\n const alias = searchParams.get('alias') || '';\n const [session, setSession] = useState<SessionDetail | null>(null);\n const [inbox, setInbox] = useState<Message[]>([]);\n const [sse, setSse] = useState(0);\n const [error, setError] = useState('');\n const [sendMsg, setSendMsg] = useState('');\n const [sending, setSending] = useState(false);\n\n const fetchData = useCallback(async () => {\n if (!alias) return;\n try {\n const res = await fetch(`/api/hub/session?alias=${encodeURIComponent(alias)}`);\n const data = await res.json();\n if (data.session) setSession(data.session);\n if (data.inbox) setInbox(data.inbox);\n setSse(data.sse || 0);\n setError('');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'fetch failed');\n }\n }, [alias]);\n\n useEffect(() => {\n fetchData();\n const interval = setInterval(fetchData, 5000);\n return () => clearInterval(interval);\n }, [fetchData]);\n\n const [sendError, setSendError] = useState('');\n\n const sendTask = async () => {\n if (!sendMsg.trim() || !alias) return;\n setSending(true);\n setSendError('');\n try {\n const res = await fetch('/api/hub/send', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ alias, task: sendMsg }),\n });\n const data = await res.json();\n if (data.ok) {\n setSendMsg('');\n setTimeout(fetchData, 2000);\n } else {\n setSendError(data.error || 'Send failed');\n }\n } catch (e: unknown) {\n setSendError(e instanceof Error ? e.message : 'Send failed');\n }\n setSending(false);\n };\n\n if (!alias) {\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono flex items-center justify-center\">\n <p className=\"text-gray-500\">No alias specified. <Link href=\"/\" className=\"text-blue-400 hover:underline\">Back to dashboard</Link></p>\n </div>\n );\n }\n\n const statusColor = session?.status === 'working' ? 'text-green-400' :\n session?.status === 'idle' ? 'text-blue-400' : 'text-gray-500';\n\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono\">\n {/* Header โ€” round 40: avatar joins the alias for cross-page hue\n consistency; agent type lives in a subtitle so users know what\n kind of node they're looking at. */}\n <div className=\"flex items-center gap-3 mb-6 lg:ml-0 ml-10\">\n <Link href=\"/nodes\" className=\"text-gray-500 hover:text-gray-300 text-sm shrink-0\">&larr; Nodes</Link>\n <AliasAvatar alias={alias} size={32} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-xl sm:text-2xl font-bold text-white truncate\">{alias}</h1>\n <span className={`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${\n sse > 0 ? (session?.status === 'working' ? 'bg-green-500 animate-pulse' : 'bg-emerald-400') : 'bg-gray-500'\n }`} />\n <span className={`text-[10px] uppercase tracking-wide font-semibold ${statusColor}`}>{session?.status || 'unknown'}</span>\n </div>\n {session?.agent && (\n <div className=\"text-xs text-gray-500 truncate\">{session.agent}{session.server ? <> <span className=\"text-gray-700 mx-1\">ยท</span> {session.server}</> : null}</div>\n )}\n </div>\n </div>\n\n {error && (\n <div className=\"bg-red-900/20 border border-red-800/40 text-red-300 px-4 py-2 rounded-lg mb-6 text-sm\">{error}</div>\n )}\n\n {/* Full-width tabbed layout */}\n <NodeFullPanel alias={alias} session={session} sse={sse} sendMsg={sendMsg} setSendMsg={setSendMsg} sending={sending} sendTask={sendTask} sendError={sendError} />\n </div>\n );\n}\n\nfunction NodeFullPanel({ alias, session, sse, sendMsg, setSendMsg, sending, sendTask, sendError }: {\n alias: string; session: any; sse: number; sendMsg: string; setSendMsg: (v: string) => void; sending: boolean; sendTask: () => void; sendError: string;\n}) {\n const [tab, setTab] = useState<'chat' | 'events' | 'info'>('chat');\n const [events, setEvents] = useState<Array<{ id: number; event_type: string; from_status: string; to_status: string; detail: string; created_at: string }>>([]);\n const [eventsLoaded, setEventsLoaded] = useState(false);\n\n useEffect(() => {\n if (tab === 'events' && !eventsLoaded) {\n fetch('/api/hub/task-events?limit=50').then(r => r.json()).then(d => {\n setEvents(d.events || []);\n setEventsLoaded(true);\n }).catch(() => setEventsLoaded(true));\n }\n }, [tab, eventsLoaded]);\n\n return (\n <div className=\"bg-[#0d0d1a] border border-[#2a2a4a] rounded-xl overflow-hidden h-[calc(100vh-140px)] flex flex-col\">\n {/* Tab bar โ€” round 40: emoji icons (๐Ÿ’ฌ ๐Ÿ“‹ ๐Ÿ“Š) replaced with stroke\n SVG to drop the \"AI generated\" tell. */}\n <div className=\"flex border-b border-[#2a2a4a] bg-[#0a0a15] shrink-0\">\n {([\n { id: 'chat', label: 'Chat', icon: 'M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z' },\n { id: 'events', label: 'Events', icon: 'M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8' },\n { id: 'info', label: 'Info', icon: 'M12 21a9 9 0 100-18 9 9 0 000 18z M12 8h.01 M11 12h1v4h1' },\n ] as const).map(t => (\n <button key={t.id} onClick={() => setTab(t.id)}\n className={`flex items-center gap-2 px-5 py-3 text-sm font-medium border-b-2 transition-colors ${\n tab === t.id ? 'border-cyan-400 text-cyan-300' : 'border-transparent text-gray-500 hover:text-gray-300'\n }`}>\n <svg className=\"w-4 h-4 shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={t.icon} />\n </svg>\n <span>{t.label}</span>\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"flex-1 overflow-hidden\">\n {tab === 'chat' && (\n <TaskChatPanel alias={alias} onClose={() => {}} inline />\n )}\n\n {tab === 'events' && (\n <EventsTimeline events={events} loading={!eventsLoaded} />\n )}\n\n {tab === 'info' && (\n <div className=\"p-4 overflow-y-auto h-full space-y-4 max-w-2xl\">\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-3\">Node Info</h2>\n <div className=\"space-y-2 text-xs\">\n {[\n { label: 'Node ID', value: session?.node_id, alwaysShow: true },\n { label: 'Session ID', value: session?.session_id, alwaysShow: true },\n { label: 'Resume ID', value: session?.resume_id, alwaysShow: true },\n { label: 'Alias', value: session?.alias, alwaysShow: true },\n { label: 'Agent', value: session?.agent, alwaysShow: true },\n { label: 'Model', value: session?.model, alwaysShow: true },\n { label: 'Version', value: session?.version },\n { label: 'Server', value: session?.server, alwaysShow: true },\n { label: 'Hostname', value: session?.hostname, alwaysShow: true },\n { label: 'IP', value: session?.ip, alwaysShow: true },\n { label: 'Project', value: session?.project_dir },\n { label: 'Config', value: session?.config_path, alwaysShow: true },\n { label: 'Channels', value: session?.channels?.length ? (Array.isArray(session.channels) ? session.channels.join(', ') : session.channels) : null, alwaysShow: true },\n { label: 'Tmux', value: session?.tmux_name },\n { label: 'SSE', value: sse > 0 ? `Connected (${sse})` : 'Disconnected', alwaysShow: true },\n { label: 'Progress', value: session?.progress ? `${session.progress}%` : null },\n { label: 'Score', value: session?.score },\n { label: 'Last Seen', value: session?.last_seen_at, alwaysShow: true },\n { label: 'Registered', value: session?.registered_at, alwaysShow: true },\n { label: 'Updated', value: session?.updated_at, alwaysShow: true },\n ].map(({ label, value, alwaysShow }) => (value || alwaysShow) ? (\n <div key={label} className=\"flex justify-between gap-3\">\n <span className=\"text-gray-500 shrink-0\">{label}</span>\n <span className=\"text-gray-300 truncate max-w-[200px]\" title={value ? String(value) : '--'}>\n {value ? String(value) : '--'}\n </span>\n </div>\n ) : null)}\n </div>\n </div>\n\n {/* Current Task */}\n {session?.task && (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Current Task</h2>\n <p className=\"text-xs text-gray-400 whitespace-pre-wrap\">{session.task}</p>\n </div>\n )}\n\n {/* Output */}\n {session?.output && (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Last Output</h2>\n <p className=\"text-xs text-gray-400 whitespace-pre-wrap max-h-48 overflow-y-auto\">{session.output}</p>\n </div>\n )}\n\n {/* Send Task */}\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Send Task</h2>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={sendMsg}\n onChange={e => setSendMsg(e.target.value)}\n onKeyDown={e => e.key === 'Enter' && sendTask()}\n placeholder={`Send task to ${alias}...`}\n className=\"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-blue-500 focus:outline-none\"\n />\n <button\n onClick={sendTask}\n disabled={sending || !sendMsg.trim()}\n className=\"px-3 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-700 text-white text-xs rounded transition-colors\"\n >\n {sending ? '...' : 'Send'}\n </button>\n </div>\n {sendError && <div className=\"mt-2 text-xs text-red-400\">{sendError}</div>}\n </div>\n\n {/* Tmux Terminal */}\n {session?.tmux_name && (\n <TmuxViewer tmuxName={session.tmux_name} />\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nconst EVENT_COLORS: Record<string, { dot: string; line: string; icon: string }> = {\n delivered: { dot: 'bg-blue-400', line: 'bg-blue-500/30', icon: '๐Ÿ“ฌ' },\n acked: { dot: 'bg-yellow-400', line: 'bg-yellow-500/30', icon: 'โœ…' },\n running: { dot: 'bg-green-400', line: 'bg-green-500/30', icon: 'โšก' },\n replied: { dot: 'bg-purple-400', line: 'bg-purple-500/30', icon: '๐Ÿ’ฌ' },\n failed: { dot: 'bg-red-400', line: 'bg-red-500/30', icon: 'โŒ' },\n created: { dot: 'bg-gray-400', line: 'bg-gray-500/30', icon: '๐Ÿ“' },\n};\n\nfunction EventsTimeline({ events, loading }: { events: Array<{ id: number; event_type: string; from_status: string; to_status: string; detail: string; created_at: string; task_id?: string }>; loading: boolean }) {\n if (loading) return <div className=\"flex justify-center py-8\"><div className=\"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin\" /></div>;\n if (events.length === 0) return <div className=\"text-center py-12 text-gray-600 text-xs\">No task events yet</div>;\n\n // Group by task_id\n const groups = new Map<string, typeof events>();\n events.forEach(e => {\n const key = (e as { task_id?: string }).task_id || `ungrouped-${e.id}`;\n const group = groups.get(key) || [];\n group.push(e);\n groups.set(key, group);\n });\n\n return (\n <div className=\"p-4 overflow-y-auto h-full space-y-4\">\n {[...groups.entries()].map(([taskId, taskEvents]) => (\n <div key={taskId} className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <div className=\"text-[10px] text-gray-600 mb-3 truncate\">Task: {taskId.slice(0, 20)}...</div>\n <div className=\"relative pl-6\">\n {/* Vertical line */}\n <div className=\"absolute left-[9px] top-2 bottom-2 w-0.5 bg-[#1a1a2a]\" />\n\n {taskEvents.map((e, i) => {\n const cfg = EVENT_COLORS[e.to_status] || EVENT_COLORS.created;\n return (\n <div key={e.id} className=\"relative pb-4 last:pb-0\">\n {/* Dot on line */}\n <div className={`absolute -left-6 top-0.5 w-[18px] h-[18px] rounded-full ${cfg.dot} flex items-center justify-center text-[9px] z-10 border-2 border-[#111128]`}>\n {cfg.icon.length <= 2 ? cfg.icon : ''}\n </div>\n {/* Content */}\n <div className=\"ml-2\">\n <div className=\"flex items-center gap-2\">\n <span className={`text-xs font-medium ${e.to_status === 'failed' ? 'text-red-400' : e.to_status === 'replied' ? 'text-purple-400' : 'text-gray-300'}`}>\n {e.event_type}\n </span>\n {e.from_status && (\n <span className=\"text-[10px] text-gray-600\">{e.from_status} โ†’ {e.to_status}</span>\n )}\n <span className=\"text-[10px] text-gray-600 ml-auto\">{timeAgo(e.created_at)}</span>\n </div>\n {e.detail && (\n <div className=\"text-[11px] text-gray-500 mt-0.5 truncate\">{e.detail.slice(0, 50)}{e.detail.length > 50 ? '...' : ''}</div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport default function NodePage() {\n return (\n <Suspense fallback={<div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono\">Loading...</div>}>\n <NodeDetailContent />\n </Suspense>\n );\n}\n"],"names":["timeAgo","dateStr","diff","Date","now","replace","getTime","s","Math","floor","statusColor","status","hasSse","formatUptime","seconds","h","m","AVATAR_HUES","aliasAvatarColors","alias","i","length","charCodeAt","hue","bg","ring","text","aliasInitial","ch","trim","match","toUpperCase","AliasAvatar","size","className","c","fs","max","round","style","width","height","fontSize","backgroundColor","borderColor","color","title","TmuxViewer","tmuxName","output","setOutput","loading","setLoading","expanded","setExpanded","fetchTmux","res","fetch","encodeURIComponent","data","json","error","onClick","disabled","NodeDetailContent","searchParams","get","session","setSession","inbox","setInbox","sse","setSse","setError","sendMsg","setSendMsg","sending","setSending","fetchData","e","Error","message","interval","setInterval","clearInterval","sendError","setSendError","sendTask","method","headers","body","JSON","stringify","task","ok","setTimeout","href","agent","server","NodeFullPanel","tab","setTab","events","setEvents","eventsLoaded","setEventsLoaded","then","r","d","catch","id","label","icon","map","t","fill","viewBox","stroke","strokeWidth","strokeLinecap","strokeLinejoin","onClose","inline","EventsTimeline","value","node_id","alwaysShow","session_id","resume_id","model","version","hostname","ip","project_dir","config_path","channels","Array","isArray","join","tmux_name","progress","score","last_seen_at","registered_at","updated_at","String","type","onChange","target","onKeyDown","key","placeholder","EVENT_COLORS","delivered","dot","line","acked","running","replied","failed","created","groups","Map","forEach","task_id","group","push","set","entries","taskId","taskEvents","slice","cfg","to_status","event_type","from_status","created_at","detail","NodePage","fallback"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../app/components/utils.ts","../../../../app/components/AliasAvatar.tsx","../../../../app/node/page.tsx"],"sourcesContent":["export function timeAgo(dateStr: string): string {\n if (!dateStr) return '--';\n const diff = Date.now() - new Date(dateStr.replace(' ', 'T') + 'Z').getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return `${s}s ago`;\n if (s < 3600) return `${Math.floor(s / 60)}m ago`;\n if (s < 86400) return `${Math.floor(s / 3600)}h ago`;\n return `${Math.floor(s / 86400)}d ago`;\n}\n\nexport function statusColor(status: string, hasSse: boolean): string {\n if (hasSse && status === 'working') return 'bg-green-500';\n if (hasSse && status === 'idle') return 'bg-emerald-400';\n if (hasSse) return 'bg-blue-400';\n if (status === 'offline') return 'bg-gray-500';\n return 'bg-yellow-400';\n}\n\nexport function formatUptime(seconds: number): string {\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h > 0) return `${h}h ${m}m`;\n return `${m}m`;\n}\n","/** Hue-hashed avatar pill for agent aliases. Same alias โ†’ same color across\n * every page (Messages, Nodes, TopoGraph). Use the `size` prop for inline\n * pills (16/20) vs card headers (28). Round 21 introduced the palette;\n * round 22 promotes it from app/messages to a shared component. */\n\nconst AVATAR_HUES = [180, 200, 220, 270, 300, 330, 30, 90];\n\nexport function aliasAvatarColors(alias: string): { bg: string; ring: string; text: string } {\n let h = 0;\n for (let i = 0; i < alias.length; i++) h = (h * 31 + alias.charCodeAt(i)) >>> 0;\n const hue = AVATAR_HUES[h % AVATAR_HUES.length];\n return {\n bg: `hsl(${hue} 55% 22%)`,\n ring: `hsl(${hue} 60% 45%)`,\n text: `hsl(${hue} 80% 78%)`,\n };\n}\n\nexport function aliasInitial(alias?: string): string {\n if (!alias) return 'ยท';\n const ch = alias.trim().match(/[\\p{L}\\p{N}]/u)?.[0] || alias.trim()[0] || 'ยท';\n return ch.toUpperCase();\n}\n\ninterface AliasAvatarProps {\n alias: string;\n size?: number;\n className?: string;\n}\n\nexport function AliasAvatar({ alias, size = 28, className = '' }: AliasAvatarProps) {\n const c = aliasAvatarColors(alias);\n const fs = Math.max(9, Math.round(size * 0.42));\n return (\n <span\n className={`anet-alias-avatar inline-flex items-center justify-center rounded-full border shrink-0 font-semibold ${className}`}\n style={{\n width: size,\n height: size,\n fontSize: fs,\n backgroundColor: c.bg,\n borderColor: c.ring,\n color: c.text,\n }}\n title={alias}\n aria-hidden\n >\n {aliasInitial(alias)}\n </span>\n );\n}\n","'use client';\n\nimport { useEffect, useState, useCallback } from 'react';\nimport { useSearchParams } from 'next/navigation';\nimport Link from 'next/link';\nimport { Suspense } from 'react';\nimport { TaskChatPanel } from '../components/TaskChatPanel';\nimport { timeAgo } from '../components/utils';\nimport { AliasAvatar } from '../components/AliasAvatar';\n\ninterface SessionDetail {\n resume_id: string;\n alias: string;\n status: string;\n agent: string;\n server: string;\n hostname: string;\n task: string;\n output: string;\n progress: number;\n score: number;\n registered_at: string;\n updated_at: string;\n project_dir: string;\n tmux_name: string;\n ip: string;\n node_id: string;\n session_id: string;\n config_path: string;\n channels: string[];\n last_seen_at: string;\n model: string;\n version: string;\n}\n\ninterface Message {\n id: string;\n content: string;\n from_session: string;\n priority: string;\n created_at: string;\n type: string;\n}\n\nfunction TmuxViewer({ tmuxName }: { tmuxName: string }) {\n const [output, setOutput] = useState('');\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n const fetchTmux = async () => {\n setLoading(true);\n try {\n const res = await fetch(`/api/hub/tmux?name=${encodeURIComponent(tmuxName)}`);\n const data = await res.json();\n setOutput(data.output || data.error || 'No output');\n } catch { setOutput('Failed to fetch'); }\n setLoading(false);\n };\n\n return (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <div className=\"flex items-center justify-between mb-2\">\n <h2 className=\"text-sm font-semibold text-gray-300\">Terminal ({tmuxName})</h2>\n <div className=\"flex gap-2\">\n <button onClick={fetchTmux} disabled={loading}\n className=\"text-xs text-cyan-400 hover:text-cyan-300 disabled:text-gray-600\">\n {loading ? 'Loading...' : 'Capture'}\n </button>\n {output && (\n <button onClick={() => setExpanded(!expanded)} className=\"text-xs text-gray-500 hover:text-gray-300\">\n {expanded ? 'Collapse' : 'Expand'}\n </button>\n )}\n </div>\n </div>\n {output && (\n <pre className={`text-[11px] text-green-300 bg-[#050510] rounded-lg px-3 py-2 border border-[#1a1a2a] overflow-x-auto whitespace-pre font-mono ${expanded ? 'max-h-96' : 'max-h-32'} overflow-y-auto`}>\n {output}\n </pre>\n )}\n {!output && <p className=\"text-xs text-gray-600\">Click Capture to view terminal output</p>}\n </div>\n );\n}\n\nfunction NodeDetailContent() {\n const searchParams = useSearchParams();\n const alias = searchParams.get('alias') || '';\n const [session, setSession] = useState<SessionDetail | null>(null);\n const [inbox, setInbox] = useState<Message[]>([]);\n const [sse, setSse] = useState(0);\n const [error, setError] = useState('');\n const [sendMsg, setSendMsg] = useState('');\n const [sending, setSending] = useState(false);\n\n const fetchData = useCallback(async () => {\n if (!alias) return;\n try {\n const res = await fetch(`/api/hub/session?alias=${encodeURIComponent(alias)}`);\n const data = await res.json();\n if (data.session) setSession(data.session);\n if (data.inbox) setInbox(data.inbox);\n setSse(data.sse || 0);\n setError('');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'fetch failed');\n }\n }, [alias]);\n\n useEffect(() => {\n fetchData();\n const interval = setInterval(fetchData, 5000);\n return () => clearInterval(interval);\n }, [fetchData]);\n\n const [sendError, setSendError] = useState('');\n\n const sendTask = async () => {\n if (!sendMsg.trim() || !alias) return;\n setSending(true);\n setSendError('');\n try {\n const res = await fetch('/api/hub/send', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ alias, task: sendMsg }),\n });\n const data = await res.json();\n if (data.ok) {\n setSendMsg('');\n setTimeout(fetchData, 2000);\n } else {\n setSendError(data.error || 'Send failed');\n }\n } catch (e: unknown) {\n setSendError(e instanceof Error ? e.message : 'Send failed');\n }\n setSending(false);\n };\n\n if (!alias) {\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono flex items-center justify-center\">\n <p className=\"text-gray-500\">No alias specified. <Link href=\"/\" className=\"text-blue-400 hover:underline\">Back to dashboard</Link></p>\n </div>\n );\n }\n\n const statusColor = session?.status === 'working' ? 'text-green-400' :\n session?.status === 'idle' ? 'text-blue-400' : 'text-gray-500';\n\n return (\n <div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-4 sm:p-6 font-mono\">\n {/* Header โ€” round 40: avatar joins the alias for cross-page hue\n consistency; agent type lives in a subtitle so users know what\n kind of node they're looking at. */}\n <div className=\"flex items-center gap-3 mb-6 lg:ml-0 ml-10\">\n <Link href=\"/nodes\" className=\"text-gray-500 hover:text-gray-300 text-sm shrink-0\">&larr; Nodes</Link>\n <AliasAvatar alias={alias} size={32} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-xl sm:text-2xl font-bold text-white truncate\">{alias}</h1>\n <span className={`inline-block w-1.5 h-1.5 rounded-full shrink-0 ${\n sse > 0 ? (session?.status === 'working' ? 'bg-green-500 animate-pulse' : 'bg-emerald-400') : 'bg-gray-500'\n }`} />\n <span className={`text-[10px] uppercase tracking-wide font-semibold ${statusColor}`}>{session?.status || 'unknown'}</span>\n </div>\n {session?.agent && (\n <div className=\"text-xs text-gray-500 truncate\">{session.agent}{session.server ? <> <span className=\"text-gray-700 mx-1\">ยท</span> {session.server}</> : null}</div>\n )}\n </div>\n </div>\n\n {error && (\n <div className=\"bg-red-900/20 border border-red-800/40 text-red-300 px-4 py-2 rounded-lg mb-6 text-sm\">{error}</div>\n )}\n\n {/* Full-width tabbed layout */}\n <NodeFullPanel alias={alias} session={session} sse={sse} sendMsg={sendMsg} setSendMsg={setSendMsg} sending={sending} sendTask={sendTask} sendError={sendError} />\n </div>\n );\n}\n\nfunction NodeFullPanel({ alias, session, sse, sendMsg, setSendMsg, sending, sendTask, sendError }: {\n alias: string; session: any; sse: number; sendMsg: string; setSendMsg: (v: string) => void; sending: boolean; sendTask: () => void; sendError: string;\n}) {\n const [tab, setTab] = useState<'chat' | 'events' | 'info'>('chat');\n const [events, setEvents] = useState<Array<{ id: number; event_type: string; from_status: string; to_status: string; detail: string; created_at: string }>>([]);\n const [eventsLoaded, setEventsLoaded] = useState(false);\n\n useEffect(() => {\n if (tab === 'events' && !eventsLoaded) {\n fetch('/api/hub/task-events?limit=50').then(r => r.json()).then(d => {\n setEvents(d.events || []);\n setEventsLoaded(true);\n }).catch(() => setEventsLoaded(true));\n }\n }, [tab, eventsLoaded]);\n\n return (\n <div className=\"bg-[#0d0d1a] border border-[#2a2a4a] rounded-xl overflow-hidden h-[calc(100vh-140px)] flex flex-col\">\n {/* Tab bar โ€” round 40: emoji icons (๐Ÿ’ฌ ๐Ÿ“‹ ๐Ÿ“Š) replaced with stroke\n SVG to drop the \"AI generated\" tell. */}\n <div className=\"flex border-b border-[#2a2a4a] bg-[#0a0a15] shrink-0\">\n {([\n { id: 'chat', label: 'Chat', icon: 'M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z' },\n { id: 'events', label: 'Events', icon: 'M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8' },\n { id: 'info', label: 'Info', icon: 'M12 21a9 9 0 100-18 9 9 0 000 18z M12 8h.01 M11 12h1v4h1' },\n ] as const).map(t => (\n <button key={t.id} onClick={() => setTab(t.id)}\n className={`flex items-center gap-2 px-5 py-3 text-sm font-medium border-b-2 transition-colors ${\n tab === t.id ? 'border-cyan-400 text-cyan-300' : 'border-transparent text-gray-500 hover:text-gray-300'\n }`}>\n <svg className=\"w-4 h-4 shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={t.icon} />\n </svg>\n <span>{t.label}</span>\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"flex-1 overflow-hidden\">\n {tab === 'chat' && (\n <TaskChatPanel alias={alias} onClose={() => {}} inline />\n )}\n\n {tab === 'events' && (\n <EventsTimeline events={events} loading={!eventsLoaded} />\n )}\n\n {tab === 'info' && (\n <div className=\"p-4 overflow-y-auto h-full space-y-4 max-w-2xl\">\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-3\">Node Info</h2>\n <div className=\"space-y-2 text-xs\">\n {[\n { label: 'Node ID', value: session?.node_id, alwaysShow: true },\n { label: 'Session ID', value: session?.session_id, alwaysShow: true },\n { label: 'Resume ID', value: session?.resume_id, alwaysShow: true },\n { label: 'Alias', value: session?.alias, alwaysShow: true },\n { label: 'Agent', value: session?.agent, alwaysShow: true },\n { label: 'Model', value: session?.model, alwaysShow: true },\n { label: 'Version', value: session?.version },\n { label: 'Server', value: session?.server, alwaysShow: true },\n { label: 'Hostname', value: session?.hostname, alwaysShow: true },\n { label: 'IP', value: session?.ip, alwaysShow: true },\n { label: 'Project', value: session?.project_dir },\n { label: 'Config', value: session?.config_path, alwaysShow: true },\n { label: 'Channels', value: session?.channels?.length ? (Array.isArray(session.channels) ? session.channels.join(', ') : session.channels) : null, alwaysShow: true },\n { label: 'Tmux', value: session?.tmux_name },\n { label: 'SSE', value: sse > 0 ? `Connected (${sse})` : 'Disconnected', alwaysShow: true },\n { label: 'Progress', value: session?.progress ? `${session.progress}%` : null },\n { label: 'Score', value: session?.score },\n { label: 'Last Seen', value: session?.last_seen_at, alwaysShow: true },\n { label: 'Registered', value: session?.registered_at, alwaysShow: true },\n { label: 'Updated', value: session?.updated_at, alwaysShow: true },\n ].map(({ label, value, alwaysShow }) => (value || alwaysShow) ? (\n <div key={label} className=\"flex justify-between gap-3\">\n <span className=\"text-gray-500 shrink-0\">{label}</span>\n <span className=\"text-gray-300 truncate max-w-[200px]\" title={value ? String(value) : '--'}>\n {value ? String(value) : '--'}\n </span>\n </div>\n ) : null)}\n </div>\n </div>\n\n {/* Current Task */}\n {session?.task && (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Current Task</h2>\n <p className=\"text-xs text-gray-400 whitespace-pre-wrap\">{session.task}</p>\n </div>\n )}\n\n {/* Output */}\n {session?.output && (\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Last Output</h2>\n <p className=\"text-xs text-gray-400 whitespace-pre-wrap max-h-48 overflow-y-auto\">{session.output}</p>\n </div>\n )}\n\n {/* Send Task */}\n <div className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Send Task</h2>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={sendMsg}\n onChange={e => setSendMsg(e.target.value)}\n onKeyDown={e => e.key === 'Enter' && sendTask()}\n placeholder={`Send task to ${alias}...`}\n className=\"flex-1 bg-[#0a0a15] border border-[#2a2a4a] rounded px-3 py-2 text-xs text-white placeholder-gray-600 focus:border-blue-500 focus:outline-none\"\n />\n <button\n onClick={sendTask}\n disabled={sending || !sendMsg.trim()}\n className=\"px-3 py-2 bg-blue-600 hover:bg-blue-500 disabled:bg-gray-700 text-white text-xs rounded transition-colors\"\n >\n {sending ? '...' : 'Send'}\n </button>\n </div>\n {sendError && <div className=\"mt-2 text-xs text-red-400\">{sendError}</div>}\n </div>\n\n {/* Tmux Terminal */}\n {session?.tmux_name && (\n <TmuxViewer tmuxName={session.tmux_name} />\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/** Round 59: emoji icons replaced with stroke SVG paths to drop the\n * \"AI generated\" tell. Each path is sized to fit inside the 18px\n * colored event dot. */\nconst EVENT_COLORS: Record<string, { dot: string; line: string; path: string }> = {\n delivered: { dot: 'bg-blue-400', line: 'bg-blue-500/30', path: 'M12 5v14 M5 12l7 7 7-7' }, // down arrow\n acked: { dot: 'bg-yellow-400', line: 'bg-yellow-500/30', path: 'M20 6 9 17l-5-5' }, // check\n running: { dot: 'bg-green-400', line: 'bg-green-500/30', path: 'M13 2L4 14h6l-1 8 10-12h-6l1-8z' }, // bolt\n replied: { dot: 'bg-purple-400', line: 'bg-purple-500/30', path: 'M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z' }, // chat bubble\n failed: { dot: 'bg-red-400', line: 'bg-red-500/30', path: 'M18 6 6 18 M6 6l12 12' }, // X\n created: { dot: 'bg-gray-400', line: 'bg-gray-500/30', path: 'M12 5v14 M5 12h14' }, // plus\n};\n\nfunction EventsTimeline({ events, loading }: { events: Array<{ id: number; event_type: string; from_status: string; to_status: string; detail: string; created_at: string; task_id?: string }>; loading: boolean }) {\n if (loading) return <div className=\"flex justify-center py-8\"><div className=\"w-5 h-5 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin\" /></div>;\n if (events.length === 0) return <div className=\"text-center py-12 text-gray-600 text-xs\">No task events yet</div>;\n\n // Group by task_id\n const groups = new Map<string, typeof events>();\n events.forEach(e => {\n const key = (e as { task_id?: string }).task_id || `ungrouped-${e.id}`;\n const group = groups.get(key) || [];\n group.push(e);\n groups.set(key, group);\n });\n\n return (\n <div className=\"p-4 overflow-y-auto h-full space-y-4\">\n {[...groups.entries()].map(([taskId, taskEvents]) => (\n <div key={taskId} className=\"bg-[#111128] border border-[#2a2a4a] rounded-xl p-4\">\n <div className=\"text-[10px] text-gray-600 mb-3 truncate\">Task: {taskId.slice(0, 20)}...</div>\n <div className=\"relative pl-6\">\n {/* Vertical line */}\n <div className=\"absolute left-[9px] top-2 bottom-2 w-0.5 bg-[#1a1a2a]\" />\n\n {taskEvents.map((e, i) => {\n const cfg = EVENT_COLORS[e.to_status] || EVENT_COLORS.created;\n return (\n <div key={e.id} className=\"relative pb-4 last:pb-0\">\n {/* Dot on line โ€” round 59: emoji icons replaced with\n a 10px stroke SVG path matching event type. */}\n <div className={`absolute -left-6 top-0.5 w-[18px] h-[18px] rounded-full ${cfg.dot} flex items-center justify-center z-10 border-2 border-[#111128]`}>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#0a0a15\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d={cfg.path} />\n </svg>\n </div>\n {/* Content */}\n <div className=\"ml-2\">\n <div className=\"flex items-center gap-2\">\n <span className={`text-xs font-medium ${e.to_status === 'failed' ? 'text-red-400' : e.to_status === 'replied' ? 'text-purple-400' : 'text-gray-300'}`}>\n {e.event_type}\n </span>\n {e.from_status && (\n <span className=\"text-[10px] text-gray-600\">{e.from_status} โ†’ {e.to_status}</span>\n )}\n <span className=\"text-[10px] text-gray-600 ml-auto\">{timeAgo(e.created_at)}</span>\n </div>\n {e.detail && (\n <div className=\"text-[11px] text-gray-500 mt-0.5 truncate\">{e.detail.slice(0, 50)}{e.detail.length > 50 ? '...' : ''}</div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport default function NodePage() {\n return (\n <Suspense fallback={<div className=\"min-h-screen bg-[#0a0a1a] text-gray-100 p-6 font-mono\">Loading...</div>}>\n <NodeDetailContent />\n </Suspense>\n );\n}\n"],"names":["timeAgo","dateStr","diff","Date","now","replace","getTime","s","Math","floor","statusColor","status","hasSse","formatUptime","seconds","h","m","AVATAR_HUES","aliasAvatarColors","alias","i","length","charCodeAt","hue","bg","ring","text","aliasInitial","ch","trim","match","toUpperCase","AliasAvatar","size","className","c","fs","max","round","style","width","height","fontSize","backgroundColor","borderColor","color","title","TmuxViewer","tmuxName","output","setOutput","loading","setLoading","expanded","setExpanded","fetchTmux","res","fetch","encodeURIComponent","data","json","error","onClick","disabled","NodeDetailContent","searchParams","get","session","setSession","inbox","setInbox","sse","setSse","setError","sendMsg","setSendMsg","sending","setSending","fetchData","e","Error","message","interval","setInterval","clearInterval","sendError","setSendError","sendTask","method","headers","body","JSON","stringify","task","ok","setTimeout","href","agent","server","NodeFullPanel","tab","setTab","events","setEvents","eventsLoaded","setEventsLoaded","then","r","d","catch","id","label","icon","map","t","fill","viewBox","stroke","strokeWidth","strokeLinecap","strokeLinejoin","onClose","inline","EventsTimeline","value","node_id","alwaysShow","session_id","resume_id","model","version","hostname","ip","project_dir","config_path","channels","Array","isArray","join","tmux_name","progress","score","last_seen_at","registered_at","updated_at","String","type","onChange","target","onKeyDown","key","placeholder","EVENT_COLORS","delivered","dot","line","path","acked","running","replied","failed","created","groups","Map","forEach","task_id","group","push","set","entries","taskId","taskEvents","slice","cfg","to_status","event_type","from_status","created_at","detail","NodePage","fallback"],"mappings":"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"}