@sleep2agi/agent-network-dashboard 0.5.3-preview.23 → 0.5.3-preview.231

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 (368) 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/09oamdv~26l2i.js +1 -0
  143. package/.next/static/chunks/{0uasv5346--sz.js → 0f.appti_l02h.js} +1 -1
  144. package/.next/static/chunks/0fcch25_x_e6k.css +2 -0
  145. package/.next/static/chunks/0j0b0yd222u40.js +4 -0
  146. package/.next/static/chunks/0xuohyx.zz.1-.js +1 -0
  147. package/.next/trace +2 -2
  148. package/.next/trace-build +1 -1
  149. package/app/components/TopoGraph.tsx +5654 -178
  150. package/app/globals.css +524 -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-layout-trailer-breath-test.mjs +86 -0
  183. package/scripts/topo-chrome-nodesize-trailer-breath-test.mjs +86 -0
  184. package/scripts/topo-chrome-wrapper-halo-test.mjs +83 -0
  185. package/scripts/topo-chrome-zoom-wrapper-breath-test.mjs +85 -0
  186. package/scripts/topo-click-ripple-glow-test.mjs +86 -0
  187. package/scripts/topo-click-ripple-halo-layers-test.mjs +79 -0
  188. package/scripts/topo-click-ripple-sw-test.mjs +110 -0
  189. package/scripts/topo-cluster-count-attr-test.mjs +80 -0
  190. package/scripts/topo-crescent-breath-test.mjs +104 -0
  191. package/scripts/topo-crescent-envelope-breath-test.mjs +103 -0
  192. package/scripts/topo-crescent-recede-test.mjs +111 -0
  193. package/scripts/topo-dense-alias-chat-halo-test.mjs +73 -0
  194. package/scripts/topo-dense-alias-halo-layers-test.mjs +80 -0
  195. package/scripts/topo-dual-axis-surfaces-catalog-test.mjs +94 -0
  196. package/scripts/topo-edge-badge-circle-brightness-test.mjs +82 -0
  197. package/scripts/topo-edge-badge-circle-hot-pulse-test.mjs +100 -0
  198. package/scripts/topo-edge-badge-digit-halo-layers-test.mjs +107 -0
  199. package/scripts/topo-edge-badge-endpoint-gate-test.mjs +94 -0
  200. package/scripts/topo-edge-badge-halo-layers-test.mjs +85 -0
  201. package/scripts/topo-edge-badge-hot-pulse-test.mjs +92 -0
  202. package/scripts/topo-edge-badge-hover-glow-test.mjs +90 -0
  203. package/scripts/topo-edge-badge-text-brightness-test.mjs +83 -0
  204. package/scripts/topo-edge-chat-gate-test.mjs +71 -0
  205. package/scripts/topo-edge-flow-rail-halo-layers-test.mjs +89 -0
  206. package/scripts/topo-edge-particle-brightness-test.mjs +82 -0
  207. package/scripts/topo-edge-particle-halo-layers-test.mjs +91 -0
  208. package/scripts/topo-edge-pill-glow-test.mjs +67 -0
  209. package/scripts/topo-edge-pin-halo-test.mjs +99 -0
  210. package/scripts/topo-edge-visible-brightness-test.mjs +84 -0
  211. package/scripts/topo-edge-visible-halo-layers-test.mjs +87 -0
  212. package/scripts/topo-endpoint-ring-brightness-test.mjs +83 -0
  213. package/scripts/topo-endpoint-ring-flow-halo-test.mjs +107 -0
  214. package/scripts/topo-endpoint-ring-halo-layers-test.mjs +100 -0
  215. package/scripts/topo-filter-pill-glow-test.mjs +90 -0
  216. package/scripts/topo-filter-pill-halo-layers-test.mjs +27 -0
  217. package/scripts/topo-flow-arrow-brightness-test.mjs +82 -0
  218. package/scripts/topo-flow-rail-brightness-test.mjs +80 -0
  219. package/scripts/topo-fullscreen-attr-test.mjs +73 -0
  220. package/scripts/topo-fullscreen-brightness-test.mjs +84 -0
  221. package/scripts/topo-fullscreen-icon-rotate-test.mjs +93 -0
  222. package/scripts/topo-grid-content-bottom-attr-test.mjs +72 -0
  223. package/scripts/topo-group-box-brightness-test.mjs +84 -0
  224. package/scripts/topo-group-box-halo-layers-test.mjs +91 -0
  225. package/scripts/topo-group-chat-gate-test.mjs +77 -0
  226. package/scripts/topo-group-label-brightness-test.mjs +84 -0
  227. package/scripts/topo-group-label-halo-layers-test.mjs +78 -0
  228. package/scripts/topo-group-label-hover-glow-test.mjs +86 -0
  229. package/scripts/topo-group-label-member-alias-hover-test.mjs +125 -0
  230. package/scripts/topo-group-pill-glow-test.mjs +76 -0
  231. package/scripts/topo-group-tint-brightness-test.mjs +82 -0
  232. package/scripts/topo-h2-dual-axis-breath-test.mjs +92 -0
  233. package/scripts/topo-halo-chat-gate-test.mjs +72 -0
  234. package/scripts/topo-hover-detail-halo-test.mjs +76 -0
  235. package/scripts/topo-hub-core-brightness-test.mjs +82 -0
  236. package/scripts/topo-hub-core-halo-layers-test.mjs +81 -0
  237. package/scripts/topo-hub-digit-brightness-test.mjs +79 -0
  238. package/scripts/topo-hub-digit-halo-layers-test.mjs +76 -0
  239. package/scripts/topo-hub-digit-ls-test.mjs +119 -0
  240. package/scripts/topo-hub-halo-brightness-test.mjs +80 -0
  241. package/scripts/topo-hub-halo-glow-test.mjs +96 -0
  242. package/scripts/topo-hub-halo-halo-layers-test.mjs +76 -0
  243. package/scripts/topo-hub-highlight-amplify-test.mjs +139 -0
  244. package/scripts/topo-hub-highlight-brightness-test.mjs +84 -0
  245. package/scripts/topo-hub-highlight-fill-transition-test.mjs +84 -0
  246. package/scripts/topo-hub-highlight-glow-test.mjs +99 -0
  247. package/scripts/topo-hub-highlight-halo-layers-test.mjs +78 -0
  248. package/scripts/topo-hub-highlight-r-test.mjs +112 -0
  249. package/scripts/topo-hub-highlight-recede-test.mjs +5 -1
  250. package/scripts/topo-hub-hover-ring-brightness-test.mjs +79 -0
  251. package/scripts/topo-hub-hover-ring-glow-test.mjs +97 -0
  252. package/scripts/topo-hub-hover-ring-halo-layers-test.mjs +71 -0
  253. package/scripts/topo-hub-idle-breath-test.mjs +6 -7
  254. package/scripts/topo-hub-spoke-brightness-test.mjs +77 -0
  255. package/scripts/topo-hub-spoke-glow-test.mjs +112 -0
  256. package/scripts/topo-hub-spoke-halo-layers-test.mjs +97 -0
  257. package/scripts/topo-hub-spoke-self-filter-test.mjs +119 -0
  258. package/scripts/topo-kicker-breath-test.mjs +100 -0
  259. package/scripts/topo-kicker-dual-axis-breath-test.mjs +81 -0
  260. package/scripts/topo-kicker-halo-layers-test.mjs +82 -0
  261. package/scripts/topo-label-card-brightness-test.mjs +81 -0
  262. package/scripts/topo-layout-hover-fw-test.mjs +98 -0
  263. package/scripts/topo-layout-toggle-brightness-test.mjs +94 -0
  264. package/scripts/topo-layout-toggle-halo-layers-test.mjs +95 -0
  265. package/scripts/topo-legend-count-brightness-test.mjs +80 -0
  266. package/scripts/topo-legend-count-halo-layers-test.mjs +79 -0
  267. package/scripts/topo-legend-count-letter-spacing-test.mjs +108 -0
  268. package/scripts/topo-legend-label-fw-test.mjs +107 -0
  269. package/scripts/topo-legend-panel-title-breath-test.mjs +86 -0
  270. package/scripts/topo-legend-pin-ring-brightness-test.mjs +82 -0
  271. package/scripts/topo-legend-pin-ring-halo-layers-test.mjs +71 -0
  272. package/scripts/topo-legend-row-count-brightness-test.mjs +85 -0
  273. package/scripts/topo-legend-row-label-glow-test.mjs +102 -0
  274. package/scripts/topo-legend-swatch-glow-test.mjs +109 -0
  275. package/scripts/topo-legend-swatch-member-alias-match-test.mjs +139 -0
  276. package/scripts/topo-legend-tint-brightness-test.mjs +83 -0
  277. package/scripts/topo-legend-trio-halo-layers-test.mjs +22 -0
  278. package/scripts/topo-minimap-container-halo-test.mjs +82 -0
  279. package/scripts/topo-minimap-dot-chat-gate-test.mjs +81 -0
  280. package/scripts/topo-minimap-hover-glow-test.mjs +109 -0
  281. package/scripts/topo-minimap-viewport-brightness-test.mjs +84 -0
  282. package/scripts/topo-minimap-viewport-halo-layers-test.mjs +24 -0
  283. package/scripts/topo-more-footer-brightness-test.mjs +94 -0
  284. package/scripts/topo-node-alias-brightness-test.mjs +84 -0
  285. package/scripts/topo-node-avatar-halo-layers-test.mjs +25 -0
  286. package/scripts/topo-node-hover-ring-halo-layers-test.mjs +70 -0
  287. package/scripts/topo-node-label-card-halo-test.mjs +76 -0
  288. package/scripts/topo-node-sub-text-brightness-test.mjs +88 -0
  289. package/scripts/topo-nodesize-brightness-test.mjs +82 -0
  290. package/scripts/topo-nodesize-halo-layers-test.mjs +89 -0
  291. package/scripts/topo-nodesize-hover-fw-test.mjs +99 -0
  292. package/scripts/topo-orphan-label-opacity-test.mjs +98 -0
  293. package/scripts/topo-panel-count-halo-layers-test.mjs +91 -0
  294. package/scripts/topo-panel-count-hover-ls-test.mjs +87 -0
  295. package/scripts/topo-panel-rect-halo-test.mjs +90 -0
  296. package/scripts/topo-panel-row-brightness-test.mjs +116 -0
  297. package/scripts/topo-panel-title-brightness-test.mjs +98 -0
  298. package/scripts/topo-panel-title-glow-test.mjs +111 -0
  299. package/scripts/topo-panel-titles-dual-axis-breath-test.mjs +94 -0
  300. package/scripts/topo-panel-titles-halo-layers-test.mjs +23 -0
  301. package/scripts/topo-pill-x-rotate-test.mjs +96 -0
  302. package/scripts/topo-pip-brightness-test.mjs +85 -0
  303. package/scripts/topo-pressure-bar-halo-layers-test.mjs +19 -0
  304. package/scripts/topo-pressure-seg-glow-test.mjs +92 -0
  305. package/scripts/topo-pressure-seg-member-alias-match-test.mjs +133 -0
  306. package/scripts/topo-pressure-seg-motion-test.mjs +101 -0
  307. package/scripts/topo-recent-count-brightness-test.mjs +84 -0
  308. package/scripts/topo-recent-more-fw-test.mjs +126 -0
  309. package/scripts/topo-recent-more-halo-layers-test.mjs +90 -0
  310. package/scripts/topo-recent-panel-hot-pulse-test.mjs +105 -0
  311. package/scripts/topo-recent-panel-title-breath-test.mjs +91 -0
  312. package/scripts/topo-recent-pip-halo-layers-test.mjs +82 -0
  313. package/scripts/topo-recent-row-chat-gate-test.mjs +75 -0
  314. package/scripts/topo-recent-row-content-lift-test.mjs +140 -0
  315. package/scripts/topo-recent-row-fw-test.mjs +115 -0
  316. package/scripts/topo-recent-row-text-glow-test.mjs +86 -0
  317. package/scripts/topo-recent-row-text-halo-layers-test.mjs +67 -0
  318. package/scripts/topo-recent-tint-brightness-test.mjs +80 -0
  319. package/scripts/topo-recent-ts-brightness-test.mjs +86 -0
  320. package/scripts/topo-reduced-motion-attr-test.mjs +69 -0
  321. package/scripts/topo-reset-brightness-test.mjs +83 -0
  322. package/scripts/topo-reset-icon-hover-scale-test.mjs +102 -0
  323. package/scripts/topo-respiratory-patterns-catalog-test.mjs +106 -0
  324. package/scripts/topo-respiratory-rolodex-test.mjs +83 -0
  325. package/scripts/topo-runtime-badge-brightness-test.mjs +78 -0
  326. package/scripts/topo-runtime-badge-glow-test.mjs +108 -0
  327. package/scripts/topo-runtime-badge-halo-layers-test.mjs +87 -0
  328. package/scripts/topo-runtime-badge-rotate-test.mjs +85 -0
  329. package/scripts/topo-section-title-breath-test.mjs +83 -0
  330. package/scripts/topo-section-title-halo-layers-test.mjs +88 -0
  331. package/scripts/topo-spoke-chat-gate-test.mjs +72 -0
  332. package/scripts/topo-starfield-hue-test.mjs +109 -0
  333. package/scripts/topo-status-pin-pill-halo-layers-test.mjs +17 -0
  334. package/scripts/topo-status-ring-brightness-test.mjs +84 -0
  335. package/scripts/topo-status-ring-chat-gate-test.mjs +72 -0
  336. package/scripts/topo-status-ring-halo-layers-test.mjs +105 -0
  337. package/scripts/topo-status-ring-status-halo-test.mjs +110 -0
  338. package/scripts/topo-sub-text-chat-brightness-test.mjs +81 -0
  339. package/scripts/topo-title-block-envelope-breath-test.mjs +87 -0
  340. package/scripts/topo-titleblock-h2-hover-fw-test.mjs +109 -0
  341. package/scripts/topo-titleblock-h2-hover-tracking-test.mjs +128 -0
  342. package/scripts/topo-titleblock-kicker-hover-test.mjs +134 -0
  343. package/scripts/topo-vendor-chip-glow-test.mjs +97 -0
  344. package/scripts/topo-vendor-chip-halo-layers-test.mjs +18 -0
  345. package/scripts/topo-vendor-chip-pin-halo-test.mjs +88 -0
  346. package/scripts/topo-vendor-count-suffix-halo-layers-test.mjs +79 -0
  347. package/scripts/topo-vendor-distribution-wrapper-halo-test.mjs +93 -0
  348. package/scripts/topo-vendor-letter-halo-layers-test.mjs +93 -0
  349. package/scripts/topo-vendor-pill-glow-test.mjs +98 -0
  350. package/scripts/topo-watermark-breath-test.mjs +100 -0
  351. package/scripts/topo-watermark-dual-axis-breath-test.mjs +88 -0
  352. package/scripts/topo-watermark-envelope-breath-test.mjs +88 -0
  353. package/scripts/topo-watermark-recede-test.mjs +114 -0
  354. package/scripts/topo-working-online-chip-halo-layers-test.mjs +94 -0
  355. package/scripts/topo-zoom-buttons-brightness-test.mjs +94 -0
  356. package/scripts/topo-zoom-in-out-halo-layers-test.mjs +97 -0
  357. package/scripts/topo-zoom-level-breath-test.mjs +87 -0
  358. package/scripts/topo-zoom-level-brightness-test.mjs +83 -0
  359. package/scripts/topo-zoom-level-color-test.mjs +105 -0
  360. package/scripts/topo-zoom-level-dual-axis-breath-test.mjs +83 -0
  361. package/scripts/topo-zoom-level-halo-layers-test.mjs +78 -0
  362. package/.next/static/chunks/0m.1mvl~t.avc.css +0 -2
  363. package/.next/static/chunks/0o7ix_c958qcs.js +0 -4
  364. package/.next/static/chunks/10q5vtqj7.g7b.js +0 -1
  365. package/.next/static/chunks/16faz62o8faa9.js +0 -1
  366. /package/.next/static/{hJ3DiAf0PdSz8-LSqjCPy → ZyjUKk4WhRuLkc8K4d7em}/_buildManifest.js +0 -0
  367. /package/.next/static/{hJ3DiAf0PdSz8-LSqjCPy → ZyjUKk4WhRuLkc8K4d7em}/_clientMiddlewareManifest.js +0 -0
  368. /package/.next/static/{hJ3DiAf0PdSz8-LSqjCPy → ZyjUKk4WhRuLkc8K4d7em}/_ssgManifest.js +0 -0
@@ -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,87 @@
1
+ /* Round 703 — chrome zoom-level readout at-rest breath. 9s slot in the
2
+ * respiratory rolodex between 8s panel titles and 10s H2. Hover gate
3
+ * via data-topo-chrome-zoom-level-hover="true" → animation: none, so
4
+ * the existing 4-axis hover lift takes precedence cleanly.
5
+ */
6
+ import { chromium } from 'playwright';
7
+ import { readFileSync } from 'node:fs';
8
+
9
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
10
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
11
+
12
+ const browser = await chromium.launch({ headless: true });
13
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
14
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
15
+ await ctx.addInitScript(() => {
16
+ try {
17
+ localStorage.setItem('anet-theme', 'cyber');
18
+ localStorage.setItem('anet-topo-layout', 'ring');
19
+ sessionStorage.setItem('anet_v3_auth', '1');
20
+ } catch {}
21
+ });
22
+ await ctx.route('**/api/hub/status*', async (route) => {
23
+ const r = await route.fetch();
24
+ const b = await r.json();
25
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
26
+ const mk = (alias) => ({
27
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
28
+ network_id: nid, project_dir: null,
29
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
30
+ });
31
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
32
+ });
33
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
34
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
35
+ const page = await ctx.newPage();
36
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
37
+ await page.waitForSelector('[data-topo-chrome-zoom-level]', { timeout: 15000, state: 'attached' });
38
+ await page.waitForTimeout(300);
39
+
40
+ const runtimeState = await page.evaluate(() => {
41
+ const span = document.querySelector('[data-topo-chrome-zoom-level]');
42
+ if (!span) return null;
43
+ const cs = getComputedStyle(span);
44
+ return {
45
+ has_class: span.classList.contains('anet-topo-chrome-zoom-level-breath'),
46
+ breath_attr: span.getAttribute('data-topo-chrome-zoom-level-breath'),
47
+ hover_attr: span.getAttribute('data-topo-chrome-zoom-level-hover'),
48
+ anim_name: cs.animationName,
49
+ anim_duration: cs.animationDuration,
50
+ anim_iter: cs.animationIterationCount,
51
+ };
52
+ });
53
+
54
+ await browser.close();
55
+
56
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
57
+ const tsxSrc = readFileSync('/home/vansin/agent-network-dashboard/app/components/TopoGraph.tsx', 'utf8');
58
+
59
+ const cssKeyframes = /@keyframes anet-topo-chrome-zoom-level-breath-kf\s*\{[\s\S]*?0%, 100%\s*\{\s*opacity:\s*1;\s*\}[\s\S]*?50%\s*\{\s*opacity:\s*0\.85;/.test(cssSrc);
60
+ const cssRule = /\.anet-topo-chrome-zoom-level-breath\s*\{[\s\S]*?animation:\s*anet-topo-chrome-zoom-level-breath-kf\s+9s\s+ease-in-out\s+infinite/.test(cssSrc);
61
+ const cssHoverGate = /\.anet-topo-chrome-zoom-level-breath\[data-topo-chrome-zoom-level-hover="true"\]\s*\{\s*animation:\s*none/.test(cssSrc);
62
+ const cssReducedMotion = /prefers-reduced-motion:\s*reduce\s*\)\s*\{\s*\.anet-topo-chrome-zoom-level-breath\s*\{\s*animation:\s*none/.test(cssSrc);
63
+ const tsxClass = /anet-topo-chrome-zoom-level-breath px-2 py-1/.test(tsxSrc);
64
+ const tsxAttr = /data-topo-chrome-zoom-level-breath="9s"/.test(tsxSrc);
65
+
66
+ const runtimeAnim = runtimeState?.anim_name === 'anet-topo-chrome-zoom-level-breath-kf' || runtimeState?.anim_name === 'none';
67
+ const runtimeDuration = runtimeState?.anim_duration === '9s' || runtimeState?.anim_name === 'none';
68
+
69
+ const results = {
70
+ span_present: !!runtimeState,
71
+ has_breath_class: runtimeState?.has_class === true,
72
+ breath_attr_9s: runtimeState?.breath_attr === '9s',
73
+ rest_not_hover: runtimeState?.hover_attr === 'false',
74
+ runtime_anim_ok: runtimeAnim,
75
+ runtime_duration_ok: runtimeDuration,
76
+ css_keyframes: cssKeyframes,
77
+ css_rule: cssRule,
78
+ css_hover_gate: cssHoverGate,
79
+ css_reduced_motion: cssReducedMotion,
80
+ tsx_class: tsxClass,
81
+ tsx_breath_attr: tsxAttr,
82
+ };
83
+ const ok = Object.values(results).every(Boolean);
84
+ console.log(`${ok ? '✅' : '❌'} R703 chrome zoom-level readout at-rest breath (9s, hover-gated):`,
85
+ JSON.stringify(results, null, 2),
86
+ `\n runtime: ${JSON.stringify(runtimeState)}`);
87
+ 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,83 @@
1
+ /* Round 715 — chrome zoom-level readout dual-axis breath. R703 9s
2
+ * opacity breath gains CSS transform scale axis (0.996 ↔ 1, ~0.4%)
3
+ * in the same @keyframes block. Tier-graded ladder: faster cadence
4
+ * + larger scale on secondary tiers (kicker 6s 0.5%), slower cadence
5
+ * + smaller scale on primary tiers (H2 10s 0.3%), zoom-level sits
6
+ * between at 9s 0.4%.
7
+ */
8
+ import { chromium } from 'playwright';
9
+ import { readFileSync } from 'node:fs';
10
+
11
+ const TOKEN = JSON.parse(readFileSync('/home/vansin/.anet/config.json', 'utf8')).token;
12
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
13
+
14
+ const browser = await chromium.launch({ headless: true });
15
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1200 } });
16
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
17
+ await ctx.addInitScript(() => {
18
+ try {
19
+ localStorage.setItem('anet-theme', 'cyber');
20
+ localStorage.setItem('anet-topo-layout', 'ring');
21
+ sessionStorage.setItem('anet_v3_auth', '1');
22
+ } catch {}
23
+ });
24
+ await ctx.route('**/api/hub/status*', async (route) => {
25
+ const r = await route.fetch();
26
+ const b = await r.json();
27
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
28
+ const mk = (alias) => ({
29
+ alias, status: 'idle', model: 'claude-opus-4', runtime: 'claude-code-cli',
30
+ network_id: nid, project_dir: null,
31
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
32
+ });
33
+ await route.fulfill({ response: r, json: { ...b, sessions: [mk('a·1'), mk('a·2')] } });
34
+ });
35
+ await ctx.route('**/api/hub/messages*', (r) => r.fulfill({ json: { messages: [] } }));
36
+ await ctx.route('**/api/hub/tasks*', (r) => r.fulfill({ json: { tasks: [] } }));
37
+ const page = await ctx.newPage();
38
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' });
39
+ await page.waitForSelector('[data-topo-chrome-zoom-level]', { timeout: 15000, state: 'attached' });
40
+ await page.waitForTimeout(300);
41
+
42
+ const runtimeState = await page.evaluate(() => {
43
+ const span = document.querySelector('[data-topo-chrome-zoom-level]');
44
+ if (!span) return null;
45
+ const cs = getComputedStyle(span);
46
+ return {
47
+ has_class: span.classList.contains('anet-topo-chrome-zoom-level-breath'),
48
+ breath_attr: span.getAttribute('data-topo-chrome-zoom-level-breath'),
49
+ hover_attr: span.getAttribute('data-topo-chrome-zoom-level-hover'),
50
+ anim_name: cs.animationName,
51
+ anim_duration: cs.animationDuration,
52
+ };
53
+ });
54
+
55
+ await browser.close();
56
+
57
+ const cssSrc = readFileSync('/home/vansin/agent-network-dashboard/app/globals.css', 'utf8');
58
+
59
+ const cssR703Opacity = /@keyframes anet-topo-chrome-zoom-level-breath-kf\s*\{[\s\S]*?0%, 100%\s*\{[\s\S]*?opacity:\s*1[\s\S]*?\}[\s\S]*?50%\s*\{[\s\S]*?opacity:\s*0\.85/.test(cssSrc);
60
+ const cssR703Class = /\.anet-topo-chrome-zoom-level-breath\s*\{[\s\S]*?animation:\s*anet-topo-chrome-zoom-level-breath-kf\s+9s\s+ease-in-out\s+infinite/.test(cssSrc);
61
+ const cssR703HoverGate = /\.anet-topo-chrome-zoom-level-breath\[data-topo-chrome-zoom-level-hover="true"\]\s*\{\s*animation:\s*none/.test(cssSrc);
62
+ const cssR715ScaleNorm = /@keyframes anet-topo-chrome-zoom-level-breath-kf\s*\{[\s\S]*?0%, 100%\s*\{[\s\S]*?transform:\s*scale\(1\)/.test(cssSrc);
63
+ const cssR715ScaleMid = /50%\s*\{[\s\S]*?transform:\s*scale\(0\.996\)/.test(cssSrc);
64
+
65
+ const runtimeAnim = runtimeState?.anim_name === 'anet-topo-chrome-zoom-level-breath-kf' || runtimeState?.anim_name === 'none';
66
+
67
+ const results = {
68
+ span_present: !!runtimeState,
69
+ has_breath_class: runtimeState?.has_class === true,
70
+ breath_attr_9s_preserved: runtimeState?.breath_attr === '9s',
71
+ rest_not_hover: runtimeState?.hover_attr === 'false',
72
+ runtime_anim_ok: runtimeAnim,
73
+ css_r703_opacity_kept: cssR703Opacity,
74
+ css_r703_class_kept: cssR703Class,
75
+ css_r703_hover_gate_kept: cssR703HoverGate,
76
+ css_r715_scale_norm: cssR715ScaleNorm,
77
+ css_r715_scale_mid: cssR715ScaleMid,
78
+ };
79
+ const ok = Object.values(results).every(Boolean);
80
+ console.log(`${ok ? '✅' : '❌'} R715 chrome zoom-level dual-axis breath (opacity + transform scale on shared 9s @keyframes, chrome data tier):`,
81
+ JSON.stringify(results, null, 2),
82
+ `\n runtime: ${JSON.stringify(runtimeState)}`);
83
+ 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);