@sleep2agi/agent-network-dashboard 0.4.6-preview.200 → 0.4.6-preview.202

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +4 -4
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found.html +1 -1
  14. package/.next/server/app/_not-found.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  21. package/.next/server/app/admin.html +1 -1
  22. package/.next/server/app/admin.rsc +1 -1
  23. package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  24. package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  25. package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  26. package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  27. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
  29. package/.next/server/app/index.html +2 -2
  30. package/.next/server/app/index.rsc +2 -2
  31. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  32. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  33. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  34. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/login.html +2 -2
  38. package/.next/server/app/login.rsc +2 -2
  39. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  40. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  41. package/.next/server/app/login.segments/_index.segment.rsc +1 -1
  42. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  43. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  45. package/.next/server/app/logs.html +1 -1
  46. package/.next/server/app/logs.rsc +1 -1
  47. package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
  48. package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
  49. package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
  50. package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
  51. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
  52. package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
  53. package/.next/server/app/messages.html +1 -1
  54. package/.next/server/app/messages.rsc +1 -1
  55. package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
  56. package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
  57. package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
  58. package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
  59. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
  60. package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
  61. package/.next/server/app/node.html +1 -1
  62. package/.next/server/app/node.rsc +1 -1
  63. package/.next/server/app/node.segments/_full.segment.rsc +1 -1
  64. package/.next/server/app/node.segments/_head.segment.rsc +1 -1
  65. package/.next/server/app/node.segments/_index.segment.rsc +1 -1
  66. package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
  67. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
  68. package/.next/server/app/node.segments/node.segment.rsc +1 -1
  69. package/.next/server/app/nodes.html +1 -1
  70. package/.next/server/app/nodes.rsc +1 -1
  71. package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
  72. package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
  73. package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
  74. package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
  75. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
  76. package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
  77. package/.next/server/app/page_client-reference-manifest.js +1 -1
  78. package/.next/server/app/server-logs.html +1 -1
  79. package/.next/server/app/server-logs.rsc +1 -1
  80. package/.next/server/app/server-logs.segments/_full.segment.rsc +1 -1
  81. package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
  82. package/.next/server/app/server-logs.segments/_index.segment.rsc +1 -1
  83. package/.next/server/app/server-logs.segments/_tree.segment.rsc +1 -1
  84. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
  85. package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
  86. package/.next/server/app/settings/networks.html +1 -1
  87. package/.next/server/app/settings/networks.rsc +1 -1
  88. package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
  89. package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
  90. package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
  91. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
  92. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
  93. package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
  94. package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
  95. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  96. package/.next/server/app/settings/tokens.html +1 -1
  97. package/.next/server/app/settings/tokens.rsc +1 -1
  98. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
  99. package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
  100. package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
  101. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
  102. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
  103. package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
  104. package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
  105. package/.next/server/app/settings.html +2 -2
  106. package/.next/server/app/settings.rsc +2 -2
  107. package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  108. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  109. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  110. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  111. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  112. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  113. package/.next/server/app/tasks.html +1 -1
  114. package/.next/server/app/tasks.rsc +1 -1
  115. package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
  116. package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
  117. package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
  118. package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
  119. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
  120. package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
  121. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js +1 -1
  122. package/.next/server/chunks/ssr/agent-network-dashboard_09kk21a._.js.map +1 -1
  123. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js +1 -1
  124. package/.next/server/chunks/ssr/agent-network-dashboard_app_01jhlxz._.js.map +1 -1
  125. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js +1 -1
  126. package/.next/server/chunks/ssr/agent-network-dashboard_app_09d29my._.js.map +1 -1
  127. package/.next/server/middleware-build-manifest.js +3 -3
  128. package/.next/server/pages/404.html +1 -1
  129. package/.next/server/pages/500.html +1 -1
  130. package/.next/server/server-reference-manifest.js +1 -1
  131. package/.next/server/server-reference-manifest.json +1 -1
  132. package/.next/static/chunks/{14gc66fus~iu1.js → 000394fn9cmho.js} +1 -1
  133. package/.next/static/chunks/{0.3_4175hmyj7.js → 0ha6vq_y_~tyq.js} +3 -3
  134. package/.next/static/chunks/{0d-f1995hjmz..js → 0m5sj02b4xfcv.js} +1 -1
  135. package/.next/trace +2 -2
  136. package/.next/trace-build +1 -1
  137. package/app/components/TopoGraph.tsx +61 -3
  138. package/package.json +1 -1
  139. package/scripts/topo-node-label-card-elevation-test.mjs +157 -0
  140. package/scripts/topo-recent-panel-more-cyan-hover-test.mjs +151 -0
  141. /package/.next/static/{Raqy90R8AJecH1kxtzjMG → r7RnaQFITRFvole_gQuv2}/_buildManifest.js +0 -0
  142. /package/.next/static/{Raqy90R8AJecH1kxtzjMG → r7RnaQFITRFvole_gQuv2}/_clientMiddlewareManifest.js +0 -0
  143. /package/.next/static/{Raqy90R8AJecH1kxtzjMG → r7RnaQFITRFvole_gQuv2}/_ssgManifest.js +0 -0
@@ -0,0 +1,151 @@
1
+ /* Round 195 verification: the recent-panel "+N more flows" footer
2
+ * (R128/R133) adopts the cyan vocabulary on hover, joining
3
+ * R178/R163/R179/R193 — "interactive-on-hover speaks cyan".
4
+ *
5
+ * Pre-R195 hover brightened opacity 0.55→0.85 + added underline but
6
+ * kept fill = legendText (gray). R195 fills with legendAccent (cyan-
7
+ * 400 dark / teal-600 light) on hover with a fill 200ms transition.
8
+ *
9
+ * Test (cyber/dark theme):
10
+ * 1. Need > 3 flowLinks → mock 5 distinct alias pairs each with
11
+ * one message so flowLinks.length === 5.
12
+ * 2. Footer renders, data-recent-panel-more='2' (5 - 3 visible),
13
+ * data-recent-panel-more-hovered='false' at idle.
14
+ * 3. Idle fill is gray-ish (OKLab/Lab a,b ≈ 0); opacity ≈ 0.55.
15
+ * 4. transition style includes 'fill 200ms' AND 'opacity 150ms'.
16
+ * 5. Hover the footer <g> wrapper, wait past transition.
17
+ * 6. data-recent-panel-more-hovered flips to 'true'.
18
+ * 7. Fill leans cyan (OKLab/Lab a < 0 OR b < 0); opacity ≈ 0.85.
19
+ * 8. Move away, fill returns to gray, opacity back to ~0.55.
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 browser = await chromium.launch({ headless: true });
26
+
27
+ const ctx = await browser.newContext({ viewport: { width: 1500, height: 1500 } });
28
+ await ctx.addCookies([{ name: 'anet_dashboard_session', value: `v3:${TOKEN}`, domain: '127.0.0.1', path: '/' }]);
29
+ await ctx.addInitScript(() => {
30
+ try { localStorage.setItem('anet-theme', 'cyber'); sessionStorage.setItem('anet_v3_auth', '1'); } catch {}
31
+ });
32
+
33
+ const fresh = new Date(Date.now() - 60 * 1000).toISOString();
34
+ await ctx.route('**/api/hub/status*', async (route) => {
35
+ const r = await route.fetch();
36
+ const b = await r.json();
37
+ const nid = (b.sessions || [])[0]?.network_id || 'default';
38
+ const mk = (alias) => ({
39
+ alias, status: 'working', model: 'claude-opus-4', runtime: 'cli-claude-code',
40
+ network_id: nid, project_dir: null,
41
+ created_at: fresh, updated_at: fresh, last_seen_at: fresh,
42
+ });
43
+ await route.fulfill({ response: r, json: { ...b, sessions: [
44
+ mk('alpha'), mk('beta'), mk('gamma'), mk('delta'),
45
+ ] } });
46
+ });
47
+
48
+ // 5 distinct alias pairs → flowLinks.length === 5 → footer "+2 more flows"
49
+ const now = Date.now();
50
+ const msgs = [
51
+ { id: '1', from_alias: 'alpha', to_alias: 'beta', content: 'hi', network_id: 'default', created_at: new Date(now - 1000).toISOString() },
52
+ { id: '2', from_alias: 'beta', to_alias: 'gamma', content: 'hi', network_id: 'default', created_at: new Date(now - 2000).toISOString() },
53
+ { id: '3', from_alias: 'gamma', to_alias: 'delta', content: 'hi', network_id: 'default', created_at: new Date(now - 3000).toISOString() },
54
+ { id: '4', from_alias: 'delta', to_alias: 'alpha', content: 'hi', network_id: 'default', created_at: new Date(now - 4000).toISOString() },
55
+ { id: '5', from_alias: 'alpha', to_alias: 'gamma', content: 'hi', network_id: 'default', created_at: new Date(now - 5000).toISOString() },
56
+ ];
57
+ await ctx.route('**/api/hub/messages*', (route) => route.fulfill({ json: { messages: msgs } }));
58
+ await ctx.route('**/api/hub/tasks*', (route) => route.fulfill({ json: { tasks: [] } }));
59
+
60
+ const page = await ctx.newPage();
61
+ await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' });
62
+ await page.waitForFunction(() => document.querySelectorAll('g[data-node]').length === 4, { timeout: 30000 });
63
+ await page.waitForSelector('[data-recent-panel-more]', { timeout: 10000 });
64
+ await page.waitForTimeout(400);
65
+
66
+ const probe = async () => page.evaluate(() => {
67
+ const el = document.querySelector('[data-recent-panel-more]');
68
+ if (!el) return null;
69
+ const cs = getComputedStyle(el);
70
+ return {
71
+ moreCount: el.getAttribute('data-recent-panel-more'),
72
+ hovered: el.getAttribute('data-recent-panel-more-hovered'),
73
+ fill: cs.fill,
74
+ opacity: parseFloat(cs.opacity),
75
+ transition: cs.transitionProperty + ' / ' + cs.transitionDuration,
76
+ textDeco: cs.textDecorationLine || el.getAttribute('text-decoration'),
77
+ };
78
+ });
79
+
80
+ const idle = await probe();
81
+
82
+ await page.hover('[data-recent-panel-more-nav]');
83
+ await page.waitForTimeout(250);
84
+ const hovered = await probe();
85
+
86
+ await page.mouse.move(0, 0);
87
+ await page.waitForTimeout(400); // past 200ms fill + 150ms opacity transitions with margin
88
+ const settled = await probe();
89
+
90
+ await browser.close();
91
+
92
+ // slate-400 (legendText) = rgb(148,163,184) — B-R only 36, so a B>R+30
93
+ // threshold misclassifies muted slate as "cyan". cyan-400 (legendAccent)
94
+ // = rgb(34,211,238) and our snapshot here = rgb(107,226,243): B-R ≈ 136.
95
+ // Use a tighter threshold (>=80) and a saturation gate (chroma) so the
96
+ // gray-blue slate doesn't read as cyan but saturated cyan does.
97
+ function parseColor(s) {
98
+ if (!s) return null;
99
+ let m;
100
+ m = s.match(/rgba?\(\s*(\d+)\s*,?\s*(\d+)\s*,?\s*(\d+)/);
101
+ if (m) {
102
+ const r = +m[1], g = +m[2], b = +m[3];
103
+ const chroma = Math.max(r, g, b) - Math.min(r, g, b);
104
+ return {
105
+ kind: 'rgb', r, g, b, chroma,
106
+ cyanish: b - r >= 80 && chroma > 80, // saturated blue/cyan
107
+ neutralish: Math.abs(b - r) < 50 && chroma < 70,
108
+ };
109
+ }
110
+ m = s.match(/(?:oklab|lab)\(\s*([\-\d.]+)\s+([\-\d.]+)\s+([\-\d.]+)/);
111
+ if (m) {
112
+ const L = +m[1], a = +m[2], b = +m[3];
113
+ const scale = Math.max(Math.abs(a), Math.abs(b)) > 5 ? 'lab' : 'oklab';
114
+ const thr = scale === 'lab' ? 15 : 0.08;
115
+ const ntrl = scale === 'lab' ? 8 : 0.04;
116
+ return {
117
+ kind: scale, L, a, b,
118
+ cyanish: (a < -thr || b < -thr),
119
+ neutralish: Math.abs(a) < ntrl && Math.abs(b) < ntrl,
120
+ };
121
+ }
122
+ return null;
123
+ }
124
+ const idleColor = parseColor(idle?.fill);
125
+ const hoverColor = parseColor(hovered?.fill);
126
+ const settledColor = parseColor(settled?.fill);
127
+
128
+ const results = {
129
+ footer_present: !!idle,
130
+ more_count_2: idle?.moreCount === '2',
131
+ idle_not_hovered: idle?.hovered === 'false',
132
+ idle_fill_neutral: idleColor?.neutralish === true,
133
+ idle_opacity_low: idle?.opacity > 0.45 && idle?.opacity < 0.65,
134
+ transition_has_fill: (idle?.transition || '').includes('fill') && (idle?.transition || '').includes('0.2s'),
135
+ transition_has_opacity: (idle?.transition || '').includes('opacity') && (idle?.transition || '').includes('0.15s'),
136
+
137
+ hover_attr_true: hovered?.hovered === 'true',
138
+ hover_fill_cyan: hoverColor?.cyanish === true,
139
+ hover_opacity_high: hovered?.opacity > 0.75 && hovered?.opacity < 0.95,
140
+ hover_fill_changed: idle?.fill !== hovered?.fill,
141
+
142
+ settled_attr_false: settled?.hovered === 'false',
143
+ settled_fill_neutral: settledColor?.neutralish === true,
144
+ settled_opacity_low: settled?.opacity > 0.45 && settled?.opacity < 0.65,
145
+ };
146
+ const ok = Object.values(results).every(Boolean);
147
+ console.log(`${ok ? '✅' : '❌'} recent-panel-more cyan hover:`, JSON.stringify(results),
148
+ `\n idle:`, idle, `\n idleColor:`, idleColor,
149
+ `\n hovered:`, hovered, `\n hoverColor:`, hoverColor,
150
+ `\n settled:`, settled, `\n settledColor:`, settledColor);
151
+ process.exit(ok ? 0 : 1);