agent-discover 1.0.10 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui/app.js CHANGED
@@ -12,6 +12,7 @@
12
12
  return fetch(AD._baseUrl + url, opts);
13
13
  };
14
14
  AD._wsUrl = null;
15
+ AD._root = document;
15
16
 
16
17
  let state = { servers: [], active: [], version: '0.0.0' };
17
18
  let ws = null;
@@ -59,7 +60,7 @@
59
60
  }
60
61
 
61
62
  function setConnectionStatus(cls, text) {
62
- var el = document.getElementById('conn-status');
63
+ var el = AD._root.getElementById('conn-status');
63
64
  if (!el) return;
64
65
  el.className = 'connection-status ' + cls;
65
66
  el.innerHTML = '<span class="conn-dot"></span>' + text;
@@ -70,7 +71,7 @@
70
71
  // -------------------------------------------------------------------------
71
72
 
72
73
  function initTabs() {
73
- var navItems = document.querySelectorAll('.nav-item');
74
+ var navItems = AD._root.querySelectorAll('.nav-item');
74
75
  navItems.forEach(function (item) {
75
76
  item.addEventListener('click', function () {
76
77
  var tab = this.dataset.tab;
@@ -81,10 +82,10 @@
81
82
  });
82
83
  this.classList.add('active');
83
84
 
84
- document.querySelectorAll('.tab-panel').forEach(function (p) {
85
+ AD._root.querySelectorAll('.tab-panel').forEach(function (p) {
85
86
  p.classList.remove('active');
86
87
  });
87
- document.getElementById('tab-' + tab).classList.add('active');
88
+ AD._root.getElementById('tab-' + tab).classList.add('active');
88
89
  });
89
90
  });
90
91
  }
@@ -94,19 +95,25 @@
94
95
  // -------------------------------------------------------------------------
95
96
 
96
97
  function initTheme() {
97
- var toggle = document.getElementById('theme-toggle');
98
+ var toggle = AD._root.getElementById('theme-toggle');
98
99
  var saved = localStorage.getItem('agent-discover-theme');
99
- if (saved === 'light') {
100
- document.body.className = 'theme-light';
101
- } else if (saved === 'dark') {
102
- document.body.className = 'theme-dark';
100
+ if (saved === 'dark') {
101
+ document.documentElement.setAttribute('data-theme', 'dark');
102
+ } else if (saved === 'light') {
103
+ document.documentElement.removeAttribute('data-theme');
103
104
  }
104
- updateThemeIcon(document.body.classList.contains('theme-light') ? 'light' : 'dark');
105
+ var currentTheme =
106
+ document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';
107
+ updateThemeIcon(currentTheme);
105
108
 
106
109
  toggle.addEventListener('click', function () {
107
- var isDark = document.body.classList.contains('theme-dark');
110
+ var isDark = document.documentElement.getAttribute('data-theme') === 'dark';
108
111
  var next = isDark ? 'light' : 'dark';
109
- document.body.className = 'theme-' + next;
112
+ if (next === 'dark') {
113
+ document.documentElement.setAttribute('data-theme', 'dark');
114
+ } else {
115
+ document.documentElement.removeAttribute('data-theme');
116
+ }
110
117
  localStorage.setItem('agent-discover-theme', next);
111
118
  updateThemeIcon(next);
112
119
  // Reverse sync — notify agent-desk shell
@@ -115,7 +122,7 @@
115
122
  }
116
123
 
117
124
  function updateThemeIcon(theme) {
118
- var toggle = document.getElementById('theme-toggle');
125
+ var toggle = AD._root.getElementById('theme-toggle');
119
126
  if (!toggle) return;
120
127
  var icon = toggle.querySelector('.material-symbols-outlined');
121
128
  if (icon) icon.textContent = theme === 'dark' ? 'dark_mode' : 'light_mode';
@@ -126,7 +133,7 @@
126
133
  // -------------------------------------------------------------------------
127
134
 
128
135
  function initSearch() {
129
- var input = document.getElementById('browse-search');
136
+ var input = AD._root.getElementById('browse-search');
130
137
  input.addEventListener('input', function () {
131
138
  clearTimeout(searchTimeout);
132
139
  var q = this.value.trim();
@@ -142,7 +149,7 @@
142
149
  }
143
150
 
144
151
  function fetchBrowse(query) {
145
- var el = document.getElementById('browse-list');
152
+ var el = AD._root.getElementById('browse-list');
146
153
  el.innerHTML = '<div class="loading">Searching...</div>';
147
154
 
148
155
  AD._fetch('/api/browse?query=' + encodeURIComponent(query) + '&limit=20')
@@ -164,14 +171,14 @@
164
171
  // -------------------------------------------------------------------------
165
172
 
166
173
  function render() {
167
- document.getElementById('version').textContent = 'v' + state.version;
168
- document.getElementById('installed-count').textContent = String(state.servers.length);
174
+ AD._root.getElementById('version').textContent = 'v' + state.version;
175
+ AD._root.getElementById('installed-count').textContent = String(state.servers.length);
169
176
 
170
177
  renderInstalled();
171
178
  }
172
179
 
173
180
  function renderInstalled() {
174
- var el = document.getElementById('installed-list');
181
+ var el = AD._root.getElementById('installed-list');
175
182
  if (!state.servers.length) {
176
183
  el.innerHTML =
177
184
  '<div class="empty-state"><span class="material-symbols-outlined empty-icon">dns</span><p>No servers registered</p><p class="hint">Use registry_install or browse the marketplace</p></div>';
@@ -395,7 +402,7 @@
395
402
  if (!cached) return '<div class="loading">Loading...</div>';
396
403
 
397
404
  if (!cached.length)
398
- return '<div style="font-size:12px;color:var(--text-tertiary)">No metrics data yet</div>';
405
+ return '<div style="font-size:12px;color:var(--text-dim)">No metrics data yet</div>';
399
406
 
400
407
  var rows = cached
401
408
  .map(function (m) {
@@ -472,9 +479,9 @@
472
479
  }
473
480
 
474
481
  function renderBrowse() {
475
- var el = document.getElementById('browse-list');
482
+ var el = AD._root.getElementById('browse-list');
476
483
  if (!browseResults.length) {
477
- var q = document.getElementById('browse-search').value.trim();
484
+ var q = AD._root.getElementById('browse-search').value.trim();
478
485
  if (!q) {
479
486
  el.innerHTML =
480
487
  '<div class="empty-state"><span class="material-symbols-outlined empty-icon">explore</span><p>Search the official MCP registry</p><p class="hint">Type a query above to discover servers</p></div>';
@@ -699,7 +706,7 @@
699
706
  };
700
707
 
701
708
  window.__installFromNpm = function () {
702
- var input = document.getElementById('npm-package-input');
709
+ var input = AD._root.getElementById('npm-package-input');
703
710
  var pkg = (input ? input.value : '').trim();
704
711
  if (!pkg) return;
705
712
 
@@ -835,8 +842,8 @@
835
842
  };
836
843
 
837
844
  window.__addSecret = function (serverId) {
838
- var keyEl = document.getElementById('secret-key-' + serverId);
839
- var valEl = document.getElementById('secret-val-' + serverId);
845
+ var keyEl = AD._root.getElementById('secret-key-' + serverId);
846
+ var valEl = AD._root.getElementById('secret-val-' + serverId);
840
847
  if (!keyEl || !valEl) return;
841
848
  var key = keyEl.value.trim();
842
849
  var value = valEl.value;
@@ -890,10 +897,10 @@
890
897
  };
891
898
 
892
899
  window.__saveConfig = function (serverId) {
893
- var desc = document.getElementById('cfg-desc-' + serverId);
894
- var cmd = document.getElementById('cfg-cmd-' + serverId);
895
- var argsEl = document.getElementById('cfg-args-' + serverId);
896
- var envEl = document.getElementById('cfg-env-' + serverId);
900
+ var desc = AD._root.getElementById('cfg-desc-' + serverId);
901
+ var cmd = AD._root.getElementById('cfg-cmd-' + serverId);
902
+ var argsEl = AD._root.getElementById('cfg-args-' + serverId);
903
+ var envEl = AD._root.getElementById('cfg-env-' + serverId);
897
904
  if (!desc || !cmd || !argsEl || !envEl) return;
898
905
 
899
906
  var args = argsEl.value
@@ -937,7 +944,7 @@
937
944
  // -------------------------------------------------------------------------
938
945
 
939
946
  function showToast(message, type) {
940
- var existing = document.querySelector('.toast');
947
+ var existing = AD._root.querySelector('.toast');
941
948
  if (existing) existing.remove();
942
949
 
943
950
  var toast = document.createElement('div');
@@ -962,30 +969,26 @@
962
969
  initThemeSync();
963
970
  }
964
971
 
965
- // Auto-init for standalone
966
- if (document.readyState === 'loading') {
967
- document.addEventListener('DOMContentLoaded', _init);
968
- } else {
969
- _init();
970
- }
971
-
972
972
  // -------------------------------------------------------------------------
973
973
  // Theme sync from parent (agent-desk) via executeJavaScript
974
974
  // -------------------------------------------------------------------------
975
975
 
976
976
  function initThemeSync() {
977
- // Detect external theme injection via MutationObserver on body class
977
+ // Detect external theme injection via MutationObserver on data-theme attribute
978
978
  var observer = new MutationObserver(function (mutations) {
979
979
  mutations.forEach(function (m) {
980
- if (m.attributeName === 'class') {
981
- var isDark = document.body.classList.contains('theme-dark');
980
+ if (m.attributeName === 'data-theme') {
981
+ var isDark = document.documentElement.getAttribute('data-theme') === 'dark';
982
982
  var theme = isDark ? 'dark' : 'light';
983
983
  localStorage.setItem('agent-discover-theme', theme);
984
984
  updateThemeIcon(theme);
985
985
  }
986
986
  });
987
987
  });
988
- observer.observe(document.body, { attributes: true, attributeFilter: ['class'] });
988
+ observer.observe(document.documentElement, {
989
+ attributes: true,
990
+ attributeFilter: ['data-theme'],
991
+ });
989
992
 
990
993
  // Listen for postMessage theme sync (same pattern as agent-comm)
991
994
  window.addEventListener('message', function (event) {
@@ -1071,9 +1074,6 @@
1071
1074
  '0px 1px 3px 0px rgba(0,0,0,0.3), 0px 4px 8px 3px rgba(0,0,0,0.15)',
1072
1075
  );
1073
1076
  }
1074
- root.style.setProperty('--shadow-sm', 'var(--shadow-1)');
1075
- root.style.setProperty('--shadow-md', 'var(--shadow-2)');
1076
- root.style.setProperty('--shadow-hover', 'var(--shadow-3)');
1077
1077
  }
1078
1078
 
1079
1079
  if (colors.isDark !== undefined) {
@@ -1085,7 +1085,7 @@
1085
1085
  updateThemeIcon(colors.isDark ? 'dark' : 'light');
1086
1086
  }
1087
1087
 
1088
- var themeToggle = document.getElementById('theme-toggle');
1088
+ var themeToggle = AD._root.getElementById('theme-toggle');
1089
1089
  if (themeToggle) themeToggle.style.display = 'none';
1090
1090
  });
1091
1091
  }
@@ -1094,16 +1094,43 @@
1094
1094
  options = options || {};
1095
1095
  AD._baseUrl = options.baseUrl || '';
1096
1096
  AD._wsUrl = options.wsUrl || null;
1097
- if (options.cssUrl && !document.getElementById('ad-plugin-css')) {
1097
+
1098
+ var shadow = container.attachShadow({ mode: 'open' });
1099
+
1100
+ if (options.cssUrl) {
1098
1101
  var link = document.createElement('link');
1099
- link.id = 'ad-plugin-css';
1100
1102
  link.rel = 'stylesheet';
1101
1103
  link.href = options.cssUrl;
1102
- document.head.appendChild(link);
1104
+ shadow.appendChild(link);
1103
1105
  }
1106
+
1107
+ var fonts = document.createElement('link');
1108
+ fonts.rel = 'stylesheet';
1109
+ fonts.href =
1110
+ 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap';
1111
+ shadow.appendChild(fonts);
1112
+ var icons = document.createElement('link');
1113
+ icons.rel = 'stylesheet';
1114
+ icons.href =
1115
+ 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap';
1116
+ shadow.appendChild(icons);
1117
+
1118
+ var pluginStyle = document.createElement('style');
1119
+ pluginStyle.textContent =
1120
+ ':host { display:block; width:100%; height:100%; overflow:hidden; }' +
1121
+ '.ad-wrapper { font-family:var(--font-sans); font-size:14px; color:var(--text); background:var(--bg); line-height:1.5; width:100%; height:100%; overflow:hidden; }' +
1122
+ '.ad-wrapper #app { height:100%; }';
1123
+ shadow.appendChild(pluginStyle);
1124
+
1104
1125
  if (typeof AD._template === 'function') {
1105
- container.innerHTML = AD._template();
1126
+ var wrapper = document.createElement('div');
1127
+ wrapper.setAttribute('data-theme', 'dark');
1128
+ wrapper.className = 'ad-wrapper';
1129
+ wrapper.innerHTML = AD._template();
1130
+ shadow.appendChild(wrapper);
1106
1131
  }
1132
+
1133
+ AD._root = shadow;
1107
1134
  _init();
1108
1135
  };
1109
1136
 
@@ -1113,5 +1140,20 @@
1113
1140
  ws.close();
1114
1141
  ws = null;
1115
1142
  }
1143
+ AD._root = document;
1116
1144
  };
1145
+
1146
+ var _params = new URLSearchParams(location.search);
1147
+ if (_params.get('baseUrl')) AD._baseUrl = _params.get('baseUrl');
1148
+ if (_params.get('wsUrl')) AD._wsUrl = _params.get('wsUrl');
1149
+
1150
+ try {
1151
+ if (document.readyState === 'loading') {
1152
+ document.addEventListener('DOMContentLoaded', _init);
1153
+ } else {
1154
+ _init();
1155
+ }
1156
+ } catch (e) {
1157
+ // standalone init may fail in file:// context (no WS host) — plugin mode uses mount()
1158
+ }
1117
1159
  })();
@@ -1,5 +1,5 @@
1
1
  <!doctype html>
2
- <html lang="en">
2
+ <html lang="en" data-theme="dark">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
@@ -21,7 +21,7 @@
21
21
  />
22
22
  <link rel="stylesheet" href="styles.css" />
23
23
  </head>
24
- <body class="theme-dark">
24
+ <body>
25
25
  <div class="layout">
26
26
  <aside class="sidebar">
27
27
  <div class="sidebar-header">
@@ -6,32 +6,68 @@
6
6
  :root {
7
7
  --accent: #5d8da8;
8
8
  --accent-hover: #4e7d96;
9
- --accent-light: rgba(93, 141, 168, 0.12);
9
+ --accent-dim: rgba(93, 141, 168, 0.12);
10
10
 
11
- --font-ui: 'Inter', system-ui, -apple-system, sans-serif;
11
+ --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
12
12
  --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
13
13
 
14
14
  --radius-sm: 8px;
15
- --radius-md: 12px;
15
+ --radius: 12px;
16
16
  --radius-lg: 16px;
17
17
 
18
- --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
19
- --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.12);
18
+ --shadow-1: 0 1px 3px rgba(0, 0, 0, 0.08);
19
+ --shadow-2: 0 2px 8px rgba(0, 0, 0, 0.12);
20
+ --shadow-3: 0 4px 16px rgba(0, 0, 0, 0.16);
21
+
22
+ --focus-ring: rgba(93, 141, 168, 0.4);
23
+
24
+ /* Status colors */
25
+ --green: #4caf50;
26
+ --green-dim: rgba(76, 175, 80, 0.15);
27
+ --yellow: #ffb300;
28
+ --yellow-dim: rgba(255, 179, 0, 0.15);
29
+ --orange: #ff9800;
30
+ --orange-dim: rgba(255, 152, 0, 0.15);
31
+ --red: #f44336;
32
+ --red-dim: rgba(244, 67, 54, 0.15);
33
+ --purple: #ab47bc;
34
+ --purple-dim: rgba(171, 71, 188, 0.15);
35
+ --blue: #42a5f5;
36
+ --blue-dim: rgba(66, 165, 245, 0.15);
37
+
38
+ /* Light theme as default */
39
+ --bg: #f5f5f5;
40
+ --bg-surface: #fff;
41
+ --bg-elevated: #f9f9f9;
42
+ --bg-hover: #eee;
43
+ --text: #1a1a1a;
44
+ --text-muted: #666;
45
+ --text-dim: #999;
46
+ --border: #e0e0e0;
47
+ --border-light: #f0f0f0;
48
+ --badge-bg: rgba(93, 141, 168, 0.15);
49
+ --badge-text: #3d6d88;
50
+ --status-active: #2e7d32;
51
+ --status-inactive: #999;
52
+ --tag-bg: rgba(0, 0, 0, 0.06);
53
+ --tag-text: #666;
54
+ --scrollbar-thumb: #ccc;
20
55
  }
21
56
 
22
57
  /* ---------------------------------------------------------------------------
23
58
  Theme tokens
24
59
  --------------------------------------------------------------------------- */
25
60
 
26
- .theme-dark {
61
+ [data-theme='dark'] {
27
62
  --bg: #121212;
28
63
  --bg-surface: #1e1e1e;
29
64
  --bg-elevated: #2a2a2a;
30
65
  --bg-hover: #333;
31
66
  --text: #e0e0e0;
32
- --text-secondary: #999;
33
- --text-tertiary: #666;
67
+ --text-muted: #999;
68
+ --text-dim: #666;
34
69
  --border: #333;
70
+ --border-light: #2a2a2a;
35
71
  --badge-bg: rgba(93, 141, 168, 0.2);
36
72
  --badge-text: #7ab4d0;
37
73
  --status-active: #4caf50;
@@ -41,24 +77,6 @@
41
77
  --scrollbar-thumb: #444;
42
78
  }
43
79
 
44
- .theme-light {
45
- --bg: #f5f5f5;
46
- --bg-surface: #fff;
47
- --bg-elevated: #f9f9f9;
48
- --bg-hover: #eee;
49
- --text: #1a1a1a;
50
- --text-secondary: #666;
51
- --text-tertiary: #999;
52
- --border: #e0e0e0;
53
- --badge-bg: rgba(93, 141, 168, 0.15);
54
- --badge-text: #3d6d88;
55
- --status-active: #2e7d32;
56
- --status-inactive: #999;
57
- --tag-bg: rgba(0, 0, 0, 0.06);
58
- --tag-text: #666;
59
- --scrollbar-thumb: #ccc;
60
- }
61
-
62
80
  /* ---------------------------------------------------------------------------
63
81
  Reset & base
64
82
  --------------------------------------------------------------------------- */
@@ -72,7 +90,7 @@
72
90
  }
73
91
 
74
92
  body {
75
- font-family: var(--font-ui);
93
+ font-family: var(--font-sans);
76
94
  background: var(--bg);
77
95
  color: var(--text);
78
96
  line-height: 1.5;
@@ -118,7 +136,7 @@ body {
118
136
 
119
137
  .sidebar-version {
120
138
  font-size: 12px;
121
- color: var(--text-secondary);
139
+ color: var(--text-muted);
122
140
  font-family: var(--font-mono);
123
141
  }
124
142
 
@@ -137,8 +155,8 @@ body {
137
155
  padding: 10px 12px;
138
156
  border: none;
139
157
  background: transparent;
140
- color: var(--text-secondary);
141
- font-family: var(--font-ui);
158
+ color: var(--text-muted);
159
+ font-family: var(--font-sans);
142
160
  font-size: 14px;
143
161
  font-weight: 500;
144
162
  border-radius: var(--radius-sm);
@@ -152,7 +170,7 @@ body {
152
170
  }
153
171
 
154
172
  .nav-item.active {
155
- background: var(--accent-light);
173
+ background: var(--accent-dim);
156
174
  color: var(--accent);
157
175
  }
158
176
 
@@ -182,7 +200,7 @@ body {
182
200
  .connection-status {
183
201
  font-size: 11px;
184
202
  font-family: var(--font-mono);
185
- color: var(--text-secondary);
203
+ color: var(--text-muted);
186
204
  display: flex;
187
205
  align-items: center;
188
206
  gap: 6px;
@@ -192,7 +210,7 @@ body {
192
210
  width: 6px;
193
211
  height: 6px;
194
212
  border-radius: 50%;
195
- background: var(--text-secondary);
213
+ background: var(--text-muted);
196
214
  }
197
215
 
198
216
  .connection-status.connected {
@@ -219,7 +237,7 @@ body {
219
237
  height: 36px;
220
238
  border: none;
221
239
  background: var(--bg-hover);
222
- color: var(--text-secondary);
240
+ color: var(--text-muted);
223
241
  border-radius: var(--radius-sm);
224
242
  cursor: pointer;
225
243
  transition: all 0.15s;
@@ -269,7 +287,7 @@ body {
269
287
  font-weight: 600;
270
288
  text-transform: uppercase;
271
289
  letter-spacing: 0.5px;
272
- color: var(--text-secondary);
290
+ color: var(--text-muted);
273
291
  }
274
292
 
275
293
  /* ---------------------------------------------------------------------------
@@ -290,7 +308,7 @@ body {
290
308
 
291
309
  .search-bar .material-symbols-outlined {
292
310
  font-size: 20px;
293
- color: var(--text-tertiary);
311
+ color: var(--text-dim);
294
312
  }
295
313
 
296
314
  .search-bar input {
@@ -299,12 +317,12 @@ body {
299
317
  border: none;
300
318
  outline: none;
301
319
  color: var(--text);
302
- font-family: var(--font-ui);
320
+ font-family: var(--font-sans);
303
321
  font-size: 14px;
304
322
  }
305
323
 
306
324
  .search-bar input::placeholder {
307
- color: var(--text-tertiary);
325
+ color: var(--text-dim);
308
326
  }
309
327
 
310
328
  /* ---------------------------------------------------------------------------
@@ -320,7 +338,7 @@ body {
320
338
  .server-card {
321
339
  background: var(--bg-surface);
322
340
  border: 1px solid var(--border);
323
- border-radius: var(--radius-md);
341
+ border-radius: var(--radius);
324
342
  padding: 16px;
325
343
  transition: border-color 0.15s;
326
344
  }
@@ -370,7 +388,7 @@ body {
370
388
 
371
389
  .server-description {
372
390
  font-size: 13px;
373
- color: var(--text-secondary);
391
+ color: var(--text-muted);
374
392
  margin-bottom: 10px;
375
393
  line-height: 1.4;
376
394
  }
@@ -396,7 +414,7 @@ body {
396
414
  align-items: center;
397
415
  gap: 12px;
398
416
  font-size: 12px;
399
- color: var(--text-tertiary);
417
+ color: var(--text-dim);
400
418
  }
401
419
 
402
420
  .server-meta .material-symbols-outlined {
@@ -414,7 +432,7 @@ body {
414
432
  font-weight: 600;
415
433
  text-transform: uppercase;
416
434
  letter-spacing: 0.5px;
417
- color: var(--text-tertiary);
435
+ color: var(--text-dim);
418
436
  margin-bottom: 6px;
419
437
  }
420
438
 
@@ -444,7 +462,7 @@ body {
444
462
 
445
463
  .tool-desc {
446
464
  font-size: 12px;
447
- color: var(--text-secondary);
465
+ color: var(--text-muted);
448
466
  line-height: 1.5;
449
467
  padding: 6px 0;
450
468
  border-bottom: 1px solid var(--border);
@@ -464,7 +482,7 @@ body {
464
482
  align-items: center;
465
483
  justify-content: center;
466
484
  padding: 60px 20px;
467
- color: var(--text-tertiary);
485
+ color: var(--text-dim);
468
486
  grid-column: 1 / -1;
469
487
  }
470
488
 
@@ -532,7 +550,7 @@ body {
532
550
  padding: 6px 14px;
533
551
  border: none;
534
552
  border-radius: var(--radius-sm);
535
- font-family: var(--font-ui);
553
+ font-family: var(--font-sans);
536
554
  font-size: 12px;
537
555
  font-weight: 500;
538
556
  cursor: pointer;
@@ -570,7 +588,7 @@ body {
570
588
  align-items: center;
571
589
  justify-content: center;
572
590
  padding: 40px;
573
- color: var(--text-tertiary);
591
+ color: var(--text-dim);
574
592
  font-size: 14px;
575
593
  grid-column: 1 / -1;
576
594
  }
@@ -587,7 +605,7 @@ body {
587
605
  border-radius: 6px;
588
606
  cursor: pointer;
589
607
  font-size: 12px;
590
- font-family: var(--font-ui);
608
+ font-family: var(--font-sans);
591
609
  font-weight: 500;
592
610
  display: flex;
593
611
  align-items: center;
@@ -612,13 +630,13 @@ body {
612
630
  }
613
631
 
614
632
  .btn-installed {
615
- color: var(--text-secondary);
633
+ color: var(--text-muted);
616
634
  border-color: var(--border);
617
635
  }
618
636
 
619
637
  .btn-installed:hover {
620
638
  background: transparent;
621
- color: var(--text-secondary);
639
+ color: var(--text-muted);
622
640
  }
623
641
 
624
642
  /* ---------------------------------------------------------------------------
@@ -641,7 +659,7 @@ body {
641
659
  border-radius: 6px;
642
660
  cursor: pointer;
643
661
  font-size: 12px;
644
- font-family: var(--font-ui);
662
+ font-family: var(--font-sans);
645
663
  font-weight: 500;
646
664
  display: flex;
647
665
  align-items: center;
@@ -662,7 +680,7 @@ body {
662
680
  border-radius: 6px;
663
681
  cursor: pointer;
664
682
  font-size: 12px;
665
- font-family: var(--font-ui);
683
+ font-family: var(--font-sans);
666
684
  font-weight: 500;
667
685
  display: flex;
668
686
  align-items: center;
@@ -677,13 +695,13 @@ body {
677
695
 
678
696
  .btn-delete {
679
697
  border: 1px solid var(--border);
680
- color: var(--text-tertiary);
698
+ color: var(--text-dim);
681
699
  background: transparent;
682
700
  padding: 4px 12px;
683
701
  border-radius: 6px;
684
702
  cursor: pointer;
685
703
  font-size: 12px;
686
- font-family: var(--font-ui);
704
+ font-family: var(--font-sans);
687
705
  font-weight: 500;
688
706
  display: flex;
689
707
  align-items: center;
@@ -736,13 +754,13 @@ body {
736
754
 
737
755
  .btn-health {
738
756
  border: 1px solid var(--border);
739
- color: var(--text-tertiary);
757
+ color: var(--text-dim);
740
758
  background: transparent;
741
759
  padding: 4px 8px;
742
760
  border-radius: 6px;
743
761
  cursor: pointer;
744
762
  font-size: 12px;
745
- font-family: var(--font-ui);
763
+ font-family: var(--font-sans);
746
764
  font-weight: 500;
747
765
  display: flex;
748
766
  align-items: center;
@@ -771,14 +789,14 @@ body {
771
789
  font-weight: 600;
772
790
  text-transform: uppercase;
773
791
  letter-spacing: 0.5px;
774
- color: var(--text-secondary);
792
+ color: var(--text-muted);
775
793
  display: flex;
776
794
  align-items: center;
777
795
  gap: 4px;
778
796
  background: none;
779
797
  border: none;
780
798
  padding: 0;
781
- font-family: var(--font-ui);
799
+ font-family: var(--font-sans);
782
800
  }
783
801
 
784
802
  .section-toggle .material-symbols-outlined {
@@ -817,14 +835,14 @@ body {
817
835
  }
818
836
 
819
837
  .secret-value {
820
- color: var(--text-secondary);
838
+ color: var(--text-muted);
821
839
  font-family: var(--font-mono);
822
840
  }
823
841
 
824
842
  .secret-delete {
825
843
  background: none;
826
844
  border: none;
827
- color: var(--text-tertiary);
845
+ color: var(--text-dim);
828
846
  cursor: pointer;
829
847
  padding: 2px;
830
848
  display: flex;
@@ -860,7 +878,7 @@ body {
860
878
  padding: 4px 10px;
861
879
  font-size: 12px;
862
880
  cursor: pointer;
863
- font-family: var(--font-ui);
881
+ font-family: var(--font-sans);
864
882
  }
865
883
 
866
884
  /* ---------------------------------------------------------------------------
@@ -875,7 +893,7 @@ body {
875
893
 
876
894
  .metrics-table th {
877
895
  text-align: left;
878
- color: var(--text-secondary);
896
+ color: var(--text-muted);
879
897
  font-weight: 500;
880
898
  padding: 4px 8px;
881
899
  border-bottom: 1px solid var(--border);
@@ -905,7 +923,7 @@ body {
905
923
  .config-field label {
906
924
  font-size: 11px;
907
925
  font-weight: 500;
908
- color: var(--text-secondary);
926
+ color: var(--text-muted);
909
927
  text-transform: uppercase;
910
928
  letter-spacing: 0.3px;
911
929
  }
@@ -935,7 +953,7 @@ body {
935
953
  padding: 6px 14px;
936
954
  font-size: 12px;
937
955
  cursor: pointer;
938
- font-family: var(--font-ui);
956
+ font-family: var(--font-sans);
939
957
  font-weight: 500;
940
958
  }
941
959
 
@@ -957,7 +975,7 @@ body {
957
975
  padding: 10px 16px;
958
976
  font-size: 13px;
959
977
  color: var(--text);
960
- box-shadow: var(--shadow-md);
978
+ box-shadow: var(--shadow-2);
961
979
  z-index: 1000;
962
980
  animation: toast-in 0.2s ease-out;
963
981
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-discover",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "mcpName": "io.github.keshrath/agent-discover",
5
5
  "description": "MCP server registry and marketplace — discover, install, activate, and manage MCP tools on demand",
6
6
  "type": "module",