@sleep2agi/agent-network-dashboard 0.5.3-preview.21 → 0.5.3-preview.211

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 (349) 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 +7 -7
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/server/app/_global-error.html +1 -1
  6. package/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +2 -2
  14. package/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  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 +2 -2
  21. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/admin.html +2 -2
  23. package/.next/server/app/admin.rsc +2 -2
  24. package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  27. package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  30. package/.next/server/app/index.html +2 -2
  31. package/.next/server/app/index.rsc +3 -3
  32. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  34. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  36. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  37. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/login.html +2 -2
  39. package/.next/server/app/login.rsc +3 -3
  40. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  41. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  43. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  45. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  46. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  47. package/.next/server/app/logs.html +2 -2
  48. package/.next/server/app/logs.rsc +2 -2
  49. package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
  50. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
  52. package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  55. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/messages.html +2 -2
  57. package/.next/server/app/messages.rsc +2 -2
  58. package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
  59. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
  61. package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
  62. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  64. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  65. package/.next/server/app/node.html +2 -2
  66. package/.next/server/app/node.rsc +2 -2
  67. package/.next/server/app/node.segments/_full.segment.rsc +2 -2
  68. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  69. package/.next/server/app/node.segments/_index.segment.rsc +2 -2
  70. package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  72. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  73. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/nodes.html +2 -2
  75. package/.next/server/app/nodes.rsc +2 -2
  76. package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
  77. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  78. package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
  79. package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
  80. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  81. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  82. package/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/server-logs.html +2 -2
  85. package/.next/server/app/server-logs.rsc +2 -2
  86. package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
  87. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  88. package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
  89. package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
  90. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  91. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app/settings/networks.html +2 -2
  94. package/.next/server/app/settings/networks.rsc +2 -2
  95. package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
  96. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  97. package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
  98. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
  99. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  100. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  101. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  102. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/settings/tokens.html +2 -2
  105. package/.next/server/app/settings/tokens.rsc +2 -2
  106. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
  107. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
  109. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  112. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/settings.html +2 -2
  114. package/.next/server/app/settings.rsc +3 -3
  115. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  116. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  118. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  119. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  120. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  121. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  122. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  123. package/.next/server/app/tasks.html +2 -2
  124. package/.next/server/app/tasks.rsc +2 -2
  125. package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
  126. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  127. package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
  128. package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
  129. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  130. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  131. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js +1 -1
  132. package/.next/server/chunks/ssr/[root-of-the-server]__0sv~g.o._.js.map +1 -1
  133. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +4 -4
  134. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  135. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  136. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  137. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  138. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  139. package/.next/server/middleware-build-manifest.js +3 -3
  140. package/.next/server/pages/404.html +2 -2
  141. package/.next/server/pages/500.html +1 -1
  142. package/.next/static/chunks/{17-8bizggk6cz.js → 0apd6mdrbto5c.js} +1 -1
  143. package/.next/static/chunks/0b0-7zxsflbws.js +1 -0
  144. package/.next/static/chunks/0f8..rye42edf.js +1 -0
  145. package/.next/static/chunks/0nklvgzpy80d0.css +2 -0
  146. package/.next/static/chunks/177da35-xmv.k.js +4 -0
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +5134 -184
  150. package/app/globals.css +183 -7
  151. package/package.json +4 -4
  152. package/scripts/topo-active-chrome-hover-text-test.mjs +107 -0
  153. package/scripts/topo-active-links-chip-halo-layers-test.mjs +81 -0
  154. package/scripts/topo-alias-chat-brightness-test.mjs +79 -0
  155. package/scripts/topo-alias-text-halo-layers-test.mjs +98 -0
  156. package/scripts/topo-avatar-chat-gate-test.mjs +77 -0
  157. package/scripts/topo-avatar-drop-shadow-test.mjs +86 -0
  158. package/scripts/topo-avatar-fallback-hover-test.mjs +104 -0
  159. package/scripts/topo-avatar-fallback-rotate-test.mjs +92 -0
  160. package/scripts/topo-avatar-rotate-test.mjs +85 -0
  161. package/scripts/topo-avatar-scale-test.mjs +89 -0
  162. package/scripts/topo-badge-chat-gate-test.mjs +74 -0
  163. package/scripts/topo-brand-drop-shadow-test.mjs +71 -0
  164. package/scripts/topo-brand-logo-breath-test.mjs +102 -0
  165. package/scripts/topo-brand-logo-halo-layers-test.mjs +85 -0
  166. package/scripts/topo-brand-logo-hover-brightness-test.mjs +105 -0
  167. package/scripts/topo-brand-logo-hover-rotate-test.mjs +93 -0
  168. package/scripts/topo-brand-logo-hover-test.mjs +85 -0
  169. package/scripts/topo-card-chat-brightness-test.mjs +86 -0
  170. package/scripts/topo-chat-ring-breath-curve-test.mjs +114 -0
  171. package/scripts/topo-chat-ring-brightness-test.mjs +80 -0
  172. package/scripts/topo-chat-ring-halo-layers-test.mjs +100 -0
  173. package/scripts/topo-chat-ring-r-breath-test.mjs +121 -0
  174. package/scripts/topo-chat-ring-status-halo-test.mjs +106 -0
  175. package/scripts/topo-chat-ring-sw-breath-test.mjs +123 -0
  176. package/scripts/topo-chip-pin-halo-test.mjs +85 -0
  177. package/scripts/topo-chip-row-digit-ls-test.mjs +135 -0
  178. package/scripts/topo-chip-row-member-alias-lit-test.mjs +154 -0
  179. package/scripts/topo-chip-row-tier-glow-brightness-test.mjs +99 -0
  180. package/scripts/topo-chip-row-unit-hover-tracking-test.mjs +124 -0
  181. package/scripts/topo-chrome-control-halo-layers-test.mjs +22 -0
  182. package/scripts/topo-chrome-wrapper-halo-test.mjs +83 -0
  183. package/scripts/topo-click-ripple-glow-test.mjs +86 -0
  184. package/scripts/topo-click-ripple-halo-layers-test.mjs +79 -0
  185. package/scripts/topo-click-ripple-sw-test.mjs +110 -0
  186. package/scripts/topo-cluster-count-attr-test.mjs +80 -0
  187. package/scripts/topo-crescent-breath-test.mjs +104 -0
  188. package/scripts/topo-crescent-recede-test.mjs +111 -0
  189. package/scripts/topo-dense-alias-chat-halo-test.mjs +73 -0
  190. package/scripts/topo-dense-alias-halo-layers-test.mjs +80 -0
  191. package/scripts/topo-edge-badge-circle-brightness-test.mjs +82 -0
  192. package/scripts/topo-edge-badge-circle-hot-pulse-test.mjs +100 -0
  193. package/scripts/topo-edge-badge-digit-halo-layers-test.mjs +107 -0
  194. package/scripts/topo-edge-badge-endpoint-gate-test.mjs +94 -0
  195. package/scripts/topo-edge-badge-halo-layers-test.mjs +85 -0
  196. package/scripts/topo-edge-badge-hot-pulse-test.mjs +92 -0
  197. package/scripts/topo-edge-badge-hover-glow-test.mjs +90 -0
  198. package/scripts/topo-edge-badge-text-brightness-test.mjs +83 -0
  199. package/scripts/topo-edge-chat-gate-test.mjs +71 -0
  200. package/scripts/topo-edge-flow-rail-halo-layers-test.mjs +89 -0
  201. package/scripts/topo-edge-particle-brightness-test.mjs +82 -0
  202. package/scripts/topo-edge-particle-halo-layers-test.mjs +91 -0
  203. package/scripts/topo-edge-pill-glow-test.mjs +67 -0
  204. package/scripts/topo-edge-pin-halo-test.mjs +99 -0
  205. package/scripts/topo-edge-visible-brightness-test.mjs +84 -0
  206. package/scripts/topo-edge-visible-halo-layers-test.mjs +87 -0
  207. package/scripts/topo-endpoint-ring-brightness-test.mjs +83 -0
  208. package/scripts/topo-endpoint-ring-flow-halo-test.mjs +107 -0
  209. package/scripts/topo-endpoint-ring-halo-layers-test.mjs +100 -0
  210. package/scripts/topo-filter-pill-glow-test.mjs +90 -0
  211. package/scripts/topo-filter-pill-halo-layers-test.mjs +27 -0
  212. package/scripts/topo-flow-arrow-brightness-test.mjs +82 -0
  213. package/scripts/topo-flow-rail-brightness-test.mjs +80 -0
  214. package/scripts/topo-fullscreen-attr-test.mjs +73 -0
  215. package/scripts/topo-fullscreen-brightness-test.mjs +84 -0
  216. package/scripts/topo-fullscreen-icon-rotate-test.mjs +93 -0
  217. package/scripts/topo-grid-content-bottom-attr-test.mjs +72 -0
  218. package/scripts/topo-group-box-brightness-test.mjs +84 -0
  219. package/scripts/topo-group-box-halo-layers-test.mjs +91 -0
  220. package/scripts/topo-group-chat-gate-test.mjs +77 -0
  221. package/scripts/topo-group-label-brightness-test.mjs +84 -0
  222. package/scripts/topo-group-label-halo-layers-test.mjs +78 -0
  223. package/scripts/topo-group-label-hover-glow-test.mjs +86 -0
  224. package/scripts/topo-group-label-member-alias-hover-test.mjs +125 -0
  225. package/scripts/topo-group-pill-glow-test.mjs +76 -0
  226. package/scripts/topo-group-tint-brightness-test.mjs +82 -0
  227. package/scripts/topo-halo-chat-gate-test.mjs +72 -0
  228. package/scripts/topo-hover-detail-halo-test.mjs +76 -0
  229. package/scripts/topo-hub-core-brightness-test.mjs +82 -0
  230. package/scripts/topo-hub-core-halo-layers-test.mjs +81 -0
  231. package/scripts/topo-hub-digit-brightness-test.mjs +79 -0
  232. package/scripts/topo-hub-digit-halo-layers-test.mjs +76 -0
  233. package/scripts/topo-hub-digit-ls-test.mjs +119 -0
  234. package/scripts/topo-hub-halo-brightness-test.mjs +80 -0
  235. package/scripts/topo-hub-halo-glow-test.mjs +96 -0
  236. package/scripts/topo-hub-halo-halo-layers-test.mjs +76 -0
  237. package/scripts/topo-hub-highlight-amplify-test.mjs +139 -0
  238. package/scripts/topo-hub-highlight-brightness-test.mjs +84 -0
  239. package/scripts/topo-hub-highlight-fill-transition-test.mjs +84 -0
  240. package/scripts/topo-hub-highlight-glow-test.mjs +99 -0
  241. package/scripts/topo-hub-highlight-halo-layers-test.mjs +78 -0
  242. package/scripts/topo-hub-highlight-r-test.mjs +112 -0
  243. package/scripts/topo-hub-highlight-recede-test.mjs +144 -0
  244. package/scripts/topo-hub-highlight-theme-fill-test.mjs +83 -0
  245. package/scripts/topo-hub-hover-ring-brightness-test.mjs +79 -0
  246. package/scripts/topo-hub-hover-ring-glow-test.mjs +97 -0
  247. package/scripts/topo-hub-hover-ring-halo-layers-test.mjs +71 -0
  248. package/scripts/topo-hub-idle-breath-test.mjs +7 -2
  249. package/scripts/topo-hub-spoke-brightness-test.mjs +77 -0
  250. package/scripts/topo-hub-spoke-glow-test.mjs +112 -0
  251. package/scripts/topo-hub-spoke-halo-layers-test.mjs +97 -0
  252. package/scripts/topo-hub-spoke-self-filter-test.mjs +119 -0
  253. package/scripts/topo-kicker-halo-layers-test.mjs +82 -0
  254. package/scripts/topo-label-card-brightness-test.mjs +81 -0
  255. package/scripts/topo-layout-hover-fw-test.mjs +98 -0
  256. package/scripts/topo-layout-toggle-brightness-test.mjs +94 -0
  257. package/scripts/topo-layout-toggle-halo-layers-test.mjs +95 -0
  258. package/scripts/topo-legend-count-brightness-test.mjs +80 -0
  259. package/scripts/topo-legend-count-halo-layers-test.mjs +79 -0
  260. package/scripts/topo-legend-count-letter-spacing-test.mjs +108 -0
  261. package/scripts/topo-legend-label-fw-test.mjs +107 -0
  262. package/scripts/topo-legend-pin-ring-brightness-test.mjs +82 -0
  263. package/scripts/topo-legend-pin-ring-halo-layers-test.mjs +71 -0
  264. package/scripts/topo-legend-row-count-brightness-test.mjs +85 -0
  265. package/scripts/topo-legend-row-label-glow-test.mjs +102 -0
  266. package/scripts/topo-legend-swatch-glow-test.mjs +109 -0
  267. package/scripts/topo-legend-swatch-member-alias-match-test.mjs +139 -0
  268. package/scripts/topo-legend-tint-brightness-test.mjs +83 -0
  269. package/scripts/topo-legend-trio-halo-layers-test.mjs +22 -0
  270. package/scripts/topo-minimap-container-halo-test.mjs +82 -0
  271. package/scripts/topo-minimap-dot-chat-gate-test.mjs +81 -0
  272. package/scripts/topo-minimap-hover-glow-test.mjs +109 -0
  273. package/scripts/topo-minimap-viewport-brightness-test.mjs +84 -0
  274. package/scripts/topo-minimap-viewport-halo-layers-test.mjs +24 -0
  275. package/scripts/topo-more-footer-brightness-test.mjs +94 -0
  276. package/scripts/topo-node-alias-brightness-test.mjs +84 -0
  277. package/scripts/topo-node-avatar-halo-layers-test.mjs +25 -0
  278. package/scripts/topo-node-hover-ring-halo-layers-test.mjs +70 -0
  279. package/scripts/topo-node-label-card-halo-test.mjs +76 -0
  280. package/scripts/topo-node-sub-text-brightness-test.mjs +88 -0
  281. package/scripts/topo-nodesize-brightness-test.mjs +82 -0
  282. package/scripts/topo-nodesize-halo-layers-test.mjs +89 -0
  283. package/scripts/topo-nodesize-hover-fw-test.mjs +99 -0
  284. package/scripts/topo-orphan-label-opacity-test.mjs +98 -0
  285. package/scripts/topo-panel-count-halo-layers-test.mjs +91 -0
  286. package/scripts/topo-panel-count-hover-ls-test.mjs +87 -0
  287. package/scripts/topo-panel-rect-halo-test.mjs +90 -0
  288. package/scripts/topo-panel-row-brightness-test.mjs +116 -0
  289. package/scripts/topo-panel-title-brightness-test.mjs +98 -0
  290. package/scripts/topo-panel-title-glow-test.mjs +111 -0
  291. package/scripts/topo-panel-titles-halo-layers-test.mjs +23 -0
  292. package/scripts/topo-pill-x-rotate-test.mjs +96 -0
  293. package/scripts/topo-pip-brightness-test.mjs +85 -0
  294. package/scripts/topo-pressure-bar-halo-layers-test.mjs +19 -0
  295. package/scripts/topo-pressure-seg-glow-test.mjs +92 -0
  296. package/scripts/topo-pressure-seg-member-alias-match-test.mjs +133 -0
  297. package/scripts/topo-pressure-seg-motion-test.mjs +101 -0
  298. package/scripts/topo-recent-count-brightness-test.mjs +84 -0
  299. package/scripts/topo-recent-more-fw-test.mjs +126 -0
  300. package/scripts/topo-recent-more-halo-layers-test.mjs +90 -0
  301. package/scripts/topo-recent-panel-hot-pulse-test.mjs +105 -0
  302. package/scripts/topo-recent-pip-halo-layers-test.mjs +82 -0
  303. package/scripts/topo-recent-row-chat-gate-test.mjs +75 -0
  304. package/scripts/topo-recent-row-content-lift-test.mjs +140 -0
  305. package/scripts/topo-recent-row-fw-test.mjs +115 -0
  306. package/scripts/topo-recent-row-text-glow-test.mjs +86 -0
  307. package/scripts/topo-recent-row-text-halo-layers-test.mjs +67 -0
  308. package/scripts/topo-recent-tint-brightness-test.mjs +80 -0
  309. package/scripts/topo-recent-ts-brightness-test.mjs +86 -0
  310. package/scripts/topo-reduced-motion-attr-test.mjs +69 -0
  311. package/scripts/topo-reset-brightness-test.mjs +83 -0
  312. package/scripts/topo-reset-icon-hover-scale-test.mjs +102 -0
  313. package/scripts/topo-runtime-badge-brightness-test.mjs +78 -0
  314. package/scripts/topo-runtime-badge-glow-test.mjs +108 -0
  315. package/scripts/topo-runtime-badge-halo-layers-test.mjs +87 -0
  316. package/scripts/topo-runtime-badge-rotate-test.mjs +85 -0
  317. package/scripts/topo-section-title-halo-layers-test.mjs +88 -0
  318. package/scripts/topo-spoke-chat-gate-test.mjs +72 -0
  319. package/scripts/topo-starfield-hue-test.mjs +109 -0
  320. package/scripts/topo-status-pin-pill-halo-layers-test.mjs +17 -0
  321. package/scripts/topo-status-ring-brightness-test.mjs +84 -0
  322. package/scripts/topo-status-ring-chat-gate-test.mjs +72 -0
  323. package/scripts/topo-status-ring-halo-layers-test.mjs +105 -0
  324. package/scripts/topo-status-ring-status-halo-test.mjs +110 -0
  325. package/scripts/topo-sub-text-chat-brightness-test.mjs +81 -0
  326. package/scripts/topo-titleblock-h2-hover-fw-test.mjs +109 -0
  327. package/scripts/topo-titleblock-h2-hover-tracking-test.mjs +128 -0
  328. package/scripts/topo-titleblock-kicker-hover-test.mjs +134 -0
  329. package/scripts/topo-vendor-chip-glow-test.mjs +97 -0
  330. package/scripts/topo-vendor-chip-halo-layers-test.mjs +18 -0
  331. package/scripts/topo-vendor-chip-pin-halo-test.mjs +88 -0
  332. package/scripts/topo-vendor-count-suffix-halo-layers-test.mjs +79 -0
  333. package/scripts/topo-vendor-letter-halo-layers-test.mjs +93 -0
  334. package/scripts/topo-vendor-pill-glow-test.mjs +98 -0
  335. package/scripts/topo-watermark-breath-test.mjs +100 -0
  336. package/scripts/topo-watermark-recede-test.mjs +114 -0
  337. package/scripts/topo-working-online-chip-halo-layers-test.mjs +94 -0
  338. package/scripts/topo-zoom-buttons-brightness-test.mjs +94 -0
  339. package/scripts/topo-zoom-in-out-halo-layers-test.mjs +97 -0
  340. package/scripts/topo-zoom-level-brightness-test.mjs +83 -0
  341. package/scripts/topo-zoom-level-color-test.mjs +105 -0
  342. package/scripts/topo-zoom-level-halo-layers-test.mjs +78 -0
  343. package/.next/static/chunks/01uyqm4r9qnpt.js +0 -1
  344. package/.next/static/chunks/04m~pbcsq2ej6.js +0 -4
  345. package/.next/static/chunks/0m.1mvl~t.avc.css +0 -2
  346. package/.next/static/chunks/112g_zni~x6_j.js +0 -1
  347. /package/.next/static/{9EnLX9vOfh-hoRKs1_aTC → __WGpawYHaQmmhEB3M_Qh}/_buildManifest.js +0 -0
  348. /package/.next/static/{9EnLX9vOfh-hoRKs1_aTC → __WGpawYHaQmmhEB3M_Qh}/_clientMiddlewareManifest.js +0 -0
  349. /package/.next/static/{9EnLX9vOfh-hoRKs1_aTC → __WGpawYHaQmmhEB3M_Qh}/_ssgManifest.js +0 -0
@@ -0,0 +1,94 @@
1
+ /* Round 687 — working + online chips extend from 4 hover axes (bg/
2
+ * border swap + translate-y + active scale) to add multi-layer halo
3
+ * paint axis. Per-tier tints — green-400 #4ade80 for working chip,
4
+ * cyan-300 #67e8f9 for online chip — match the existing pinnedStatus
5
+ * boxShadow inset rings. 2+4 stride, alpha 80/40. Sibling extension
6
+ * to R686 active-links chip; closes chip-row left-side trio
7
+ * (working + online + active-links) at halo-axis parity.
8
+ *
9
+ * Source assertions:
10
+ * - working chip filter: pal green-400 #4ade80 80/40 2+4 stride
11
+ * - online chip filter: pal cyan-300 #67e8f9 80/40 2+4 stride
12
+ * - both halo-layers attrs toggle '2' ↔ '0' on respective gates
13
+ *
14
+ * Runtime assertions:
15
+ * - both chips present
16
+ * - rest halo-layers='0' on both
17
+ * - mock sessions ensure both chips are interactive (workingCount + onlineNodes > 0)
18
+ */
19
+ import { chromium } from 'playwright';
20
+ import { readFileSync } from 'node:fs';
21
+
22
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
23
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
24
+
25
+ const browser = await chromium.launch({ headless: true });
26
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
27
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
28
+ await ctx.addInitScript(() => {
29
+ try {
30
+ localStorage.setItem('anet-theme', 'cyber');
31
+ localStorage.setItem('anet-topo-layout', 'ring');
32
+ sessionStorage.setItem('anet_v3_auth', '1');
33
+ } catch {}
34
+ });
35
+ await ctx.route('**/api/hub/status*', async (route) => {
36
+ const r = await route.fetch();
37
+ const b = await r.json();
38
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
39
+ const mk = (alias, status) => ({
40
+ alias, status, model: 'claude-opus-4', runtime: 'claude-code-cli',
41
+ network_id: nid, project_dir: null,
42
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
43
+ });
44
+ await route.fulfill({ response: r, json: { ...b, sessions: [
45
+ mk('a·1', 'working'),
46
+ mk('a·2', 'idle'),
47
+ mk('a·3', 'idle'),
48
+ ] } });
49
+ });
50
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
51
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
52
+ const page = await ctx.newPage();
53
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
54
+ await page.waitForSelector('[data-working-chip]', { timeout: 15000, state: 'attached' });
55
+ await page.waitForTimeout(300);
56
+
57
+ const runtimeState = await page.evaluate(() => {
58
+ const working = document.querySelector('[data-working-chip]');
59
+ const online = document.querySelector('[data-online-chip]');
60
+ return {
61
+ working_present: !!working,
62
+ online_present: !!online,
63
+ working_halo: working?.getAttribute('data-working-chip-halo-layers'),
64
+ online_halo: online?.getAttribute('data-online-chip-halo-layers'),
65
+ working_click: working?.getAttribute('data-working-chip-clickable'),
66
+ online_click: online?.getAttribute('data-online-chip-clickable'),
67
+ };
68
+ });
69
+
70
+ await browser.close();
71
+
72
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
73
+ const sourceWorkingFilter = /filter: hoveredStatus === 'working' && workingCount > 0\s*\?\s*'drop-shadow\(0 0 2px #4ade8080\) drop-shadow\(0 0 4px #4ade8040\)'/.test(src);
74
+ const sourceOnlineFilter = /filter: \(hoveredStatus === 'working' \|\| hoveredStatus === 'idle'\) && onlineNodes\.length > 0\s*\?\s*'drop-shadow\(0 0 2px #67e8f980\) drop-shadow\(0 0 4px #67e8f940\)'/.test(src);
75
+ const sourceWorkingAttr = /data-working-chip-halo-layers=\{hoveredStatus === 'working' && workingCount > 0 \? '2' : '0'\}/.test(src);
76
+ const sourceOnlineAttr = /data-online-chip-halo-layers=\{\(hoveredStatus === 'working' \|\| hoveredStatus === 'idle'\) && onlineNodes\.length > 0 \? '2' : '0'\}/.test(src);
77
+
78
+ const results = {
79
+ working_present: runtimeState.working_present,
80
+ online_present: runtimeState.online_present,
81
+ rest_working_layers_0: runtimeState.working_halo === '0',
82
+ rest_online_layers_0: runtimeState.online_halo === '0',
83
+ working_interactive: runtimeState.working_click === 'true',
84
+ online_interactive: runtimeState.online_click === 'true',
85
+ source_working_filter: sourceWorkingFilter,
86
+ source_online_filter: sourceOnlineFilter,
87
+ source_working_attr: sourceWorkingAttr,
88
+ source_online_attr: sourceOnlineAttr,
89
+ };
90
+ const ok = Object.values(results).every(Boolean);
91
+ console.log(`${ok ? '✅' : '❌'} R687 working+online chip multi-layer halo (closes chip-row left-side trio):`,
92
+ JSON.stringify(results, null, 2),
93
+ `\n runtime: ${JSON.stringify(runtimeState)}`);
94
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,94 @@
1
+ /* Round 596 verification: chrome zoom +/- segmented buttons
2
+ * gain hover:brightness-[1.15] via Tailwind class. 35th + 36th
3
+ * anchors in per-element brightness family (4th + 5th HTML).
4
+ * Paired-anchor round closing the zoom control trio.
5
+ *
6
+ * Test phases:
7
+ * 1. mock nodes → chrome zoom buttons render
8
+ * 2. rest: filter='none' (CSS hover-only, no React state)
9
+ * 3. computed transition-property contains 'filter'
10
+ * 4. source: hover:brightness-[1.15] in className + arbitrary
11
+ * transition-property includes filter
12
+ */
13
+ import { chromium } from 'playwright';
14
+ import { readFileSync } from 'node:fs';
15
+
16
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
17
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
18
+
19
+ const browser = await chromium.launch({ headless: true });
20
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
21
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
22
+ await ctx.addInitScript(() => {
23
+ try {
24
+ localStorage.setItem('anet-theme', 'cyber');
25
+ localStorage.setItem('anet-topo-layout', 'ring');
26
+ sessionStorage.setItem('anet_v3_auth', '1');
27
+ } catch {}
28
+ });
29
+ await ctx.route('**/api/hub/status*', async (route) => {
30
+ const r = await route.fetch();
31
+ const b = await r.json();
32
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
33
+ const mk = (alias) => ({
34
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
35
+ network_id: nid, project_dir: null,
36
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
37
+ });
38
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
39
+ });
40
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
41
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
42
+ const page = await ctx.newPage();
43
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
44
+ await page.waitForSelector('[data-topo-chrome-zoom-out]', { timeout: 15000, state: 'attached' });
45
+ await page.waitForTimeout(500);
46
+
47
+ const rest = await page.evaluate(() => {
48
+ const zoomOut = document.querySelector('[data-topo-chrome-zoom-out]');
49
+ const zoomIn = document.querySelector('[data-topo-chrome-zoom-in]');
50
+ if (!zoomOut || !zoomIn) return null;
51
+ return {
52
+ zoomOut: {
53
+ filter: getComputedStyle(zoomOut).filter,
54
+ transitionProperty: getComputedStyle(zoomOut).transitionProperty,
55
+ brightnessHoverAttr: zoomOut.getAttribute('data-topo-chrome-zoom-out-brightness-hover'),
56
+ ariaLabel: zoomOut.getAttribute('aria-label'),
57
+ },
58
+ zoomIn: {
59
+ filter: getComputedStyle(zoomIn).filter,
60
+ transitionProperty: getComputedStyle(zoomIn).transitionProperty,
61
+ brightnessHoverAttr: zoomIn.getAttribute('data-topo-chrome-zoom-in-brightness-hover'),
62
+ ariaLabel: zoomIn.getAttribute('aria-label'),
63
+ },
64
+ };
65
+ });
66
+
67
+ await browser.close();
68
+
69
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
70
+ const sourceOutFilter = /data-topo-chrome-zoom-out[\s\S]*?hover:brightness-\[1\.15\]/.test(src);
71
+ const sourceInFilter = /data-topo-chrome-zoom-in[\s\S]*?hover:brightness-\[1\.15\]/.test(src);
72
+ const sourceOutTransition = /data-topo-chrome-zoom-out[\s\S]*?\[transition-property:color,background-color,transform,filter\]/.test(src);
73
+ const sourceInTransition = /data-topo-chrome-zoom-in[\s\S]*?\[transition-property:color,background-color,transform,filter\]/.test(src);
74
+
75
+ const results = {
76
+ both_buttons_present: !!rest,
77
+ out_rest_filter_none: rest?.zoomOut.filter === 'none',
78
+ in_rest_filter_none: rest?.zoomIn.filter === 'none',
79
+ out_hover_attr: rest?.zoomOut.brightnessHoverAttr === '1.15',
80
+ in_hover_attr: rest?.zoomIn.brightnessHoverAttr === '1.15',
81
+ out_aria_zoom_out: /zoom out/i.test(rest?.zoomOut.ariaLabel || ''),
82
+ in_aria_zoom_in: /zoom in/i.test(rest?.zoomIn.ariaLabel || ''),
83
+ out_transition_filter: /filter/.test(rest?.zoomOut.transitionProperty || ''),
84
+ in_transition_filter: /filter/.test(rest?.zoomIn.transitionProperty || ''),
85
+ source_out_filter: sourceOutFilter,
86
+ source_in_filter: sourceInFilter,
87
+ source_out_transition: sourceOutTransition,
88
+ source_in_transition: sourceInTransition,
89
+ };
90
+ const ok = Object.values(results).every(Boolean);
91
+ console.log(`${ok ? '✅' : '❌'} R596 zoom +/- brightness (35+36th anchors, zoom trio closure):`,
92
+ JSON.stringify(results, null, 2),
93
+ `\n rest: ${JSON.stringify(rest)}`);
94
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,97 @@
1
+ /* Round 673 — chrome zoom-in + zoom-out buttons gain multi-layer
2
+ * halo on hover via new hoveredZoomIn / hoveredZoomOut state. Pre-
3
+ * R673 these buttons had only Tailwind hover:brightness-[1.15] (R596)
4
+ * — a single-axis paint lift. Post-R673 inline filter uses the same
5
+ * 2+4 stride at pal.legendAccent tint as R667 reset+fullscreen and
6
+ * R668 zoom-level pill. The chrome zoom-strip (zoom-out + zoom-level
7
+ * + zoom-in) is now FULLY halo-extended at all 3 controls.
8
+ *
9
+ * 32nd anchor in multi-layer halo family (paired sibling extension).
10
+ *
11
+ * Source assertions:
12
+ * - useState pair for hoveredZoomIn / hoveredZoomOut
13
+ * - both buttons' onMouseEnter/Leave wired
14
+ * - both inline filters use pal.legendAccent 2+4 stride alpha 80/40
15
+ * - data-topo-chrome-zoom-{in,out}-halo-layers attrs toggle '2'/'0'
16
+ *
17
+ * Runtime assertions:
18
+ * - both buttons present in DOM
19
+ * - rest state: halo-layers='0' on both
20
+ */
21
+ import { chromium } from 'playwright';
22
+ import { readFileSync } from 'node:fs';
23
+
24
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
25
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
26
+
27
+ const browser = await chromium.launch({ headless: true });
28
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
29
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
30
+ await ctx.addInitScript(() => {
31
+ try {
32
+ localStorage.setItem('anet-theme', 'cyber');
33
+ localStorage.setItem('anet-topo-layout', 'ring');
34
+ sessionStorage.setItem('anet_v3_auth', '1');
35
+ } catch {}
36
+ });
37
+ await ctx.route('**/api/hub/status*', async (route) => {
38
+ const r = await route.fetch();
39
+ const b = await r.json();
40
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
41
+ const mk = (alias) => ({
42
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
43
+ network_id: nid, project_dir: null,
44
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
45
+ });
46
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
47
+ });
48
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
49
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
50
+ const page = await ctx.newPage();
51
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
52
+ await page.waitForSelector('[data-topo-chrome-zoom-in-halo-layers]', { timeout: 15000, state: 'attached' });
53
+ await page.waitForTimeout(500);
54
+
55
+ const restState = await page.evaluate(() => {
56
+ const zin = document.querySelector('[data-topo-chrome-zoom-in-halo-layers]');
57
+ const zout = document.querySelector('[data-topo-chrome-zoom-out-halo-layers]');
58
+ return {
59
+ zin_present: !!zin,
60
+ zout_present: !!zout,
61
+ zin_layers: zin?.getAttribute('data-topo-chrome-zoom-in-halo-layers'),
62
+ zout_layers: zout?.getAttribute('data-topo-chrome-zoom-out-halo-layers'),
63
+ };
64
+ });
65
+
66
+ await browser.close();
67
+
68
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
69
+ const sourceState = /const \[hoveredZoomIn, setHoveredZoomIn\] = useState\(false\);/.test(src) &&
70
+ /const \[hoveredZoomOut, setHoveredZoomOut\] = useState\(false\);/.test(src);
71
+ const sourceZinHandler = /onMouseEnter=\{\(\) => setHoveredZoomIn\(true\)\}/.test(src) &&
72
+ /onMouseLeave=\{\(\) => setHoveredZoomIn\(false\)\}/.test(src);
73
+ const sourceZoutHandler = /onMouseEnter=\{\(\) => setHoveredZoomOut\(true\)\}/.test(src) &&
74
+ /onMouseLeave=\{\(\) => setHoveredZoomOut\(false\)\}/.test(src);
75
+ const sourceZinFilter = /filter: hoveredZoomIn \? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) drop-shadow\(0 0 4px \$\{pal\.legendAccent\}40\) brightness\(1\.15\)` : undefined/.test(src);
76
+ const sourceZoutFilter = /filter: hoveredZoomOut \? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) drop-shadow\(0 0 4px \$\{pal\.legendAccent\}40\) brightness\(1\.15\)` : undefined/.test(src);
77
+ const sourceZinAttr = /data-topo-chrome-zoom-in-halo-layers=\{hoveredZoomIn \? '2' : '0'\}/.test(src);
78
+ const sourceZoutAttr = /data-topo-chrome-zoom-out-halo-layers=\{hoveredZoomOut \? '2' : '0'\}/.test(src);
79
+
80
+ const results = {
81
+ zin_present: restState.zin_present,
82
+ zout_present: restState.zout_present,
83
+ rest_zin_layers_0: restState.zin_layers === '0',
84
+ rest_zout_layers_0: restState.zout_layers === '0',
85
+ source_state: sourceState,
86
+ source_zin_handler: sourceZinHandler,
87
+ source_zout_handler:sourceZoutHandler,
88
+ source_zin_filter: sourceZinFilter,
89
+ source_zout_filter: sourceZoutFilter,
90
+ source_zin_attr: sourceZinAttr,
91
+ source_zout_attr: sourceZoutAttr,
92
+ };
93
+ const ok = Object.values(results).every(Boolean);
94
+ console.log(`${ok ? '✅' : '❌'} R673 chrome zoom-in/-out multi-layer halo (completes chrome zoom-strip trio):`,
95
+ JSON.stringify(results, null, 2),
96
+ `\n rest: ${JSON.stringify(restState)}`);
97
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,83 @@
1
+ /* Round 593 verification: chrome zoom-level readout <span>
2
+ * gains filter brightness(1.15) on hoveredZoomLevel. 32nd
3
+ * anchor in per-element brightness family, FIRST HTML-element
4
+ * brightness anchor outside the SVG canvas.
5
+ *
6
+ * Test phases:
7
+ * 1. mock nodes → chrome strip renders with zoom-level span
8
+ * 2. rest (no hover): filter='none', brightness-attr='1'
9
+ * 3. transition-property contains 'filter'
10
+ * 4. source: filter conditional + data-attr + transition extension
11
+ */
12
+ import { chromium } from 'playwright';
13
+ import { readFileSync } from 'node:fs';
14
+
15
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
16
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
17
+
18
+ const browser = await chromium.launch({ headless: true });
19
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
20
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
21
+ await ctx.addInitScript(() => {
22
+ try {
23
+ localStorage.setItem('anet-theme', 'cyber');
24
+ localStorage.setItem('anet-topo-layout', 'ring');
25
+ sessionStorage.setItem('anet_v3_auth', '1');
26
+ } catch {}
27
+ });
28
+ await ctx.route('**/api/hub/status*', async (route) => {
29
+ const r = await route.fetch();
30
+ const b = await r.json();
31
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
32
+ const mk = (alias) => ({
33
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
34
+ network_id: nid, project_dir: null,
35
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
36
+ });
37
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
38
+ });
39
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
40
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
41
+ const page = await ctx.newPage();
42
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
43
+ await page.waitForSelector('[data-topo-chrome-zoom-level-brightness]', { timeout: 15000, state: 'attached' });
44
+ await page.waitForTimeout(500);
45
+
46
+ const rest = await page.evaluate(() => {
47
+ const el = document.querySelector('[data-topo-chrome-zoom-level-brightness]');
48
+ if (!el) return null;
49
+ const cs = getComputedStyle(el);
50
+ return {
51
+ filter: cs.filter,
52
+ transitionProperty: cs.transitionProperty,
53
+ brightnessAttr: el.getAttribute('data-topo-chrome-zoom-level-brightness'),
54
+ hoverAttr: el.getAttribute('data-topo-chrome-zoom-level-hover'),
55
+ colorAttr: el.getAttribute('data-topo-chrome-zoom-level-color'),
56
+ textContent: el.textContent,
57
+ };
58
+ });
59
+
60
+ await browser.close();
61
+
62
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
63
+ const sourceFilter = /filter: hoveredZoomLevel \? 'brightness\(1\.15\)' : undefined/.test(src);
64
+ const sourceAttr = /data-topo-chrome-zoom-level-brightness=\{hoveredZoomLevel \? '1\.15' : '1'\}/.test(src);
65
+ const sourceTransition = /transition: 'color 200ms ease-out, border-color 200ms ease-out, letter-spacing 200ms ease-out, font-weight 200ms ease-out, filter 200ms ease-out'/.test(src);
66
+
67
+ const results = {
68
+ span_present: !!rest,
69
+ rest_filter_none: rest?.filter === 'none',
70
+ rest_brightness_1: rest?.brightnessAttr === '1',
71
+ rest_hover_false: rest?.hoverAttr === 'false',
72
+ rest_color_text: rest?.colorAttr === 'text',
73
+ text_has_percent: /\d+%/.test(rest?.textContent || ''),
74
+ transition_has_filter: /filter/.test(rest?.transitionProperty || ''),
75
+ source_filter: sourceFilter,
76
+ source_attr: sourceAttr,
77
+ source_transition: sourceTransition,
78
+ };
79
+ const ok = Object.values(results).every(Boolean);
80
+ console.log(`${ok ? '✅' : '❌'} R593 zoom-level brightness (32nd anchor, first HTML-element):`,
81
+ JSON.stringify(results, null, 2),
82
+ `\n rest: ${JSON.stringify(rest)}`);
83
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,105 @@
1
+ /* Round 517 verification: chrome zoom-level readout gains a 3rd hover
2
+ * axis — color brighten from pal.legendText → pal.legendHeadline.
3
+ *
4
+ * Test phases:
5
+ * 1. rest: data-topo-chrome-zoom-level-color = 'text'
6
+ * + computed color matches pal.legendText (cyber: #94a3b8)
7
+ * 2. hover: data-topo-chrome-zoom-level-color = 'headline'
8
+ * + computed color matches pal.legendHeadline (cyber: #e5e7eb)
9
+ * + R347 letterSpacing still spreads (0.5px)
10
+ * + R420 fontWeight still lifts (600)
11
+ * 3. source-side regex confirms the color ternary wiring
12
+ */
13
+ import { chromium } from 'playwright';
14
+ import { readFileSync } from 'node:fs';
15
+
16
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
17
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
18
+
19
+ const browser = await chromium.launch({ headless: true });
20
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
21
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
22
+ await ctx.addInitScript(() => {
23
+ try {
24
+ localStorage.setItem('anet-theme', 'cyber');
25
+ localStorage.setItem('anet-topo-layout', 'ring');
26
+ sessionStorage.setItem('anet_v3_auth', '1');
27
+ } catch {}
28
+ });
29
+ await ctx.route('**/api/hub/status*', async (route) => {
30
+ const r = await route.fetch();
31
+ const b = await r.json();
32
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
33
+ const mk = (alias) => ({
34
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
35
+ network_id: nid, project_dir: null,
36
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
37
+ });
38
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1')] } });
39
+ });
40
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
41
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
42
+ const page = await ctx.newPage();
43
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
44
+ await page.waitForSelector('[data-topo-chrome-zoom-level]', { timeout: 15000 });
45
+ await page.waitForTimeout(800);
46
+
47
+ // Phase 1: rest
48
+ const rest = await page.evaluate(() => {
49
+ const el = document.querySelector('[data-topo-chrome-zoom-level]');
50
+ if (!el) return null;
51
+ const cs = getComputedStyle(el);
52
+ return {
53
+ attrColor: el.getAttribute('data-topo-chrome-zoom-level-color'),
54
+ attrHover: el.getAttribute('data-topo-chrome-zoom-level-hover'),
55
+ color: cs.color,
56
+ letterSpacing: cs.letterSpacing,
57
+ fontWeight: cs.fontWeight,
58
+ };
59
+ });
60
+
61
+ // Phase 2: hover
62
+ await page.hover('[data-topo-chrome-zoom-level]');
63
+ await page.waitForTimeout(350); // 200ms transition + slack
64
+ const hover = await page.evaluate(() => {
65
+ const el = document.querySelector('[data-topo-chrome-zoom-level]');
66
+ if (!el) return null;
67
+ const cs = getComputedStyle(el);
68
+ return {
69
+ attrColor: el.getAttribute('data-topo-chrome-zoom-level-color'),
70
+ attrHover: el.getAttribute('data-topo-chrome-zoom-level-hover'),
71
+ color: cs.color,
72
+ letterSpacing: cs.letterSpacing,
73
+ fontWeight: cs.fontWeight,
74
+ };
75
+ });
76
+
77
+ // Phase 3: source regex
78
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
79
+ const sourceWired =
80
+ /color: hoveredZoomLevel \? pal\.legendHeadline : pal\.legendText,/.test(src) &&
81
+ /data-topo-chrome-zoom-level-color=\{hoveredZoomLevel \? 'headline' : 'text'\}/.test(src);
82
+
83
+ await browser.close();
84
+
85
+ // pal.legendText cyber = #94a3b8 → rgb(148, 163, 184)
86
+ // pal.legendHeadline cyber = #e5e7eb → rgb(229, 231, 235)
87
+ const restColor = 'rgb(148, 163, 184)';
88
+ const hoverColor = 'rgb(229, 231, 235)';
89
+
90
+ const results = {
91
+ rest_attr_text: rest?.attrColor === 'text',
92
+ rest_attr_hover_false: rest?.attrHover === 'false',
93
+ rest_color_legendText: rest?.color === restColor,
94
+ rest_letter_spacing_0: rest?.letterSpacing === '0px' || rest?.letterSpacing === 'normal',
95
+ hover_attr_headline: hover?.attrColor === 'headline',
96
+ hover_attr_hover_true: hover?.attrHover === 'true',
97
+ hover_color_legendHead: hover?.color === hoverColor,
98
+ hover_letter_spacing_5: hover?.letterSpacing === '0.5px',
99
+ hover_font_weight_600: hover?.fontWeight === '600',
100
+ source_wired: sourceWired,
101
+ };
102
+ const ok = Object.values(results).every(Boolean);
103
+ console.log(`${ok ? '✅' : '❌'} R517 zoom-level 3-axis hover:`, JSON.stringify(results, null, 2),
104
+ '\n rest:', JSON.stringify(rest), '\n hover:', JSON.stringify(hover));
105
+ process.exit(ok ? 0 : 1);
@@ -0,0 +1,78 @@
1
+ /* Round 668 — chrome zoom-level readout (the percent pill between
2
+ * zoom-out and zoom-in) extends its single-axis brightness(1.15)
3
+ * hover paint to the 2-layer drop-shadow halo vocabulary used by
4
+ * R667 reset + fullscreen siblings. 27th anchor in multi-layer
5
+ * halo family — 2nd chrome-control anchor.
6
+ *
7
+ * Source assertions:
8
+ * - filter expression uses pal.legendAccent tint at 0x80 + 0x40
9
+ * with 2+4 stride, gated on hoveredZoomLevel
10
+ * - data-topo-chrome-zoom-level-halo-layers data-attr toggles
11
+ * '2' ↔ '0' on hover
12
+ *
13
+ * Runtime assertions:
14
+ * - the readout span is present in DOM and starts at halo-layers='0'
15
+ * (no hover at initial render)
16
+ */
17
+ import { chromium } from 'playwright';
18
+ import { readFileSync } from 'node:fs';
19
+
20
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
21
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
22
+
23
+ const browser = await chromium.launch({ headless: true });
24
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
25
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
26
+ await ctx.addInitScript(() => {
27
+ try {
28
+ localStorage.setItem('anet-theme', 'cyber');
29
+ localStorage.setItem('anet-topo-layout', 'ring');
30
+ sessionStorage.setItem('anet_v3_auth', '1');
31
+ } catch {}
32
+ });
33
+ await ctx.route('**/api/hub/status*', async (route) => {
34
+ const r = await route.fetch();
35
+ const b = await r.json();
36
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
37
+ const mk = (alias) => ({
38
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
39
+ network_id: nid, project_dir: null,
40
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
41
+ });
42
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
43
+ });
44
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
45
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
46
+ const page = await ctx.newPage();
47
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
48
+ await page.waitForSelector('[data-topo-chrome-zoom-level]', { timeout: 15000, state: 'attached' });
49
+ await page.waitForTimeout(500);
50
+
51
+ const restState = await page.evaluate(() => {
52
+ const el = document.querySelector('[data-topo-chrome-zoom-level]');
53
+ return el ? {
54
+ layers: el.getAttribute('data-topo-chrome-zoom-level-halo-layers'),
55
+ hover: el.getAttribute('data-topo-chrome-zoom-level-hover'),
56
+ brightness: el.getAttribute('data-topo-chrome-zoom-level-brightness'),
57
+ } : null;
58
+ });
59
+
60
+ await browser.close();
61
+
62
+ const src = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
63
+ const sourceFilter = /hoveredZoomLevel \? `drop-shadow\(0 0 2px \$\{pal\.legendAccent\}80\) drop-shadow\(0 0 4px \$\{pal\.legendAccent\}40\) brightness\(1\.15\)` : undefined/.test(src);
64
+ const sourceLayersAttr = /data-topo-chrome-zoom-level-halo-layers=\{hoveredZoomLevel \? '2' : '0'\}/.test(src);
65
+
66
+ const results = {
67
+ readout_present: !!restState,
68
+ rest_layers_zero: restState?.layers === '0',
69
+ rest_hover_false: restState?.hover === 'false',
70
+ rest_brightness_1: restState?.brightness === '1',
71
+ source_filter: sourceFilter,
72
+ source_layers_attr: sourceLayersAttr,
73
+ };
74
+ const ok = Object.values(results).every(Boolean);
75
+ console.log(`${ok ? '✅' : '❌'} R668 chrome zoom-level multi-layer halo (2nd chrome-control anchor):`,
76
+ JSON.stringify(results, null, 2),
77
+ `\n rest: ${JSON.stringify(restState)}`);
78
+ process.exit(ok ? 0 : 1);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,70286,e=>{"use strict";e.s(["DASHBOARD_VERSION",0,"0.5.3-preview.21"],70286)},48941,e=>{"use strict";var t=e.i(22381),r=e.i(23910),a=e.i(70286);e.s(["default",0,function(){let[e,s]=(0,r.useState)("login"),[n,o]=(0,r.useState)(""),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(!1),[x,g]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),u=async t=>{t.preventDefault(),m(!0),g("");try{let t=await fetch("/api/auth/v3",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,username:n,password:i})}),r=await t.json();if(r.ok){r.token&&sessionStorage.setItem("anet_v3_auth",JSON.stringify({user:r.user,token:r.token,networks:r.networks||[],currentNetwork:r.network_id||r.networks?.[0]?.network_id||""})),window.location.assign("/");return}g(r.error||"Login failed")}catch{g("Connection failed")}m(!1)};return(0,t.jsxs)("main",{className:"min-h-screen bg-[#0a0a1a] text-gray-100 font-mono flex items-center justify-center relative overflow-hidden px-4 py-10 sm:py-16",children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none anet-login-bg","aria-hidden":!0}),(0,t.jsxs)("div",{className:"relative w-full max-w-sm",children:[(0,t.jsxs)("div",{className:"text-center mb-7",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 mb-4 rounded-2xl bg-[#111128] border border-[#2a2a4a] anet-login-mark",children:(0,t.jsxs)("svg",{className:"w-9 h-9",viewBox:"0 0 32 32","aria-hidden":!0,children:[(0,t.jsx)("circle",{cx:"16",cy:"16",r:"10",fill:"none",stroke:"currentColor",strokeWidth:"1.5",opacity:"0.25",className:"text-cyan-400 anet-login-mark-ring"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"10",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"16",y1:"10",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("line",{x1:"10",y1:"20",x2:"22",y2:"20",stroke:"currentColor",strokeWidth:"1",opacity:"0.5",className:"text-cyan-400 anet-login-mark-edge"}),(0,t.jsx)("circle",{cx:"16",cy:"10",r:"3",fill:"currentColor",className:"text-cyan-400 anet-login-mark-node-a"}),(0,t.jsx)("circle",{cx:"10",cy:"20",r:"3",fill:"currentColor",className:"text-green-400 anet-login-mark-node-b"}),(0,t.jsx)("circle",{cx:"22",cy:"20",r:"3",fill:"currentColor",className:"text-violet-400 anet-login-mark-node-c"})]})}),(0,t.jsx)("h1",{className:"text-[22px] sm:text-2xl font-semibold text-white tracking-tight",children:"Agent Network"}),(0,t.jsx)("p",{className:"text-[13px] text-gray-500 mt-1.5 leading-snug",children:"login"===e?(0,t.jsxs)(t.Fragment,{children:["Welcome back · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Tasks · Mesh · Messages"})]}):(0,t.jsxs)(t.Fragment,{children:["Create your account · ",(0,t.jsx)("span",{className:"text-gray-600",children:"Free preview · no credit card"})]})})]}),(0,t.jsx)("div",{className:"flex rounded-lg border border-[#2a2a4a] bg-[#111128] p-1 mb-4",children:["login","register"].map(r=>(0,t.jsx)("button",{type:"button",onClick:()=>{s(r),g("")},className:`flex-1 rounded-md px-3 py-2 text-sm transition-colors ${e===r?"bg-cyan-500/10 text-cyan-300":"text-gray-500 hover:text-gray-200"}`,children:"login"===r?"Sign in":"Register"},r))}),(0,t.jsxs)("form",{onSubmit:u,className:"border border-[#2a2a4a] bg-[#111128]/80 backdrop-blur-sm rounded-xl p-6 shadow-2xl shadow-black/30",children:[(0,t.jsx)("label",{htmlFor:"username",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Username"}),(0,t.jsx)("input",{id:"username",type:"text",value:n,onChange:e=>o(e.target.value),autoFocus:!0,placeholder:"Enter username",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all mb-4"}),(0,t.jsx)("label",{htmlFor:"password",className:"block text-xs text-gray-500 mb-2 uppercase tracking-wider",children:"Password"}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)("input",{id:"password",type:c?"text":"password",value:i,onChange:e=>l(e.target.value),placeholder:"Enter password",className:"w-full bg-[#0a0a15] border border-[#2a2a4a] rounded-lg px-4 pr-11 py-3 text-sm text-white placeholder-gray-600 focus:border-cyan-500/50 focus:ring-1 focus:ring-cyan-500/20 focus:outline-none transition-all"}),(0,t.jsx)("button",{type:"button",onClick:()=>d(e=>!e),tabIndex:-1,"aria-label":c?"Hide password":"Show password",className:"absolute inset-y-0 right-0 flex items-center px-3 text-gray-600 hover:text-gray-300 transition-colors",children:c?(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),(0,t.jsx)("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]}):(0,t.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,t.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})})]}),x&&(0,t.jsx)("div",{className:"mt-3 text-sm text-red-300 bg-red-500/5 border border-red-500/10 rounded-lg px-3 py-2",children:x}),(0,t.jsxs)("button",{type:"submit",disabled:h||!i||!n.trim(),className:"mt-5 w-full flex items-center justify-center gap-2 px-4 py-3 bg-gradient-to-r from-cyan-600 to-blue-600 hover:from-cyan-500 hover:to-blue-500 disabled:from-gray-800 disabled:to-gray-800 disabled:text-gray-600 text-white text-sm font-medium rounded-lg transition-all shadow-lg shadow-cyan-500/10 hover:shadow-cyan-500/20 disabled:shadow-none",children:[h&&(0,t.jsxs)("svg",{"aria-hidden":!0,className:"w-4 h-4 animate-spin",viewBox:"0 0 24 24",fill:"none",children:[(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",opacity:"0.25"}),(0,t.jsx)("path",{d:"M4 12a8 8 0 018-8",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round"})]}),(0,t.jsx)("span",{children:h?"login"===e?"Signing in…":"Registering…":"login"===e?"Sign in":"Create account"})]})]}),(0,t.jsxs)("p",{className:"text-center text-[11px] text-gray-700 mt-6",children:["Sleep2AGI · Apache-2.0 · ",(0,t.jsx)("a",{href:"https://anet.sh",className:"hover:text-gray-500 transition-colors",children:"anet.sh"}),(0,t.jsx)("span",{className:"mx-1 text-gray-800",children:"·"}),(0,t.jsxs)("span",{className:"font-mono",title:"@sleep2agi/agent-network-dashboard",children:["v",a.DASHBOARD_VERSION]})]})]})]})}])}]);