agent-discover 1.3.0 → 1.3.1

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/CHANGELOG.md CHANGED
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.3.1] - 2026-04-12
9
+
10
+ ### Added
11
+
12
+ - **Log search** — text input in the Logs tab filter bar. Searches across server name, tool name, args JSON, and response text (case-insensitive substring match).
13
+ - **Log time range filter** — "From" and "To" datetime-local pickers to narrow logs to a specific window.
14
+
15
+ ### Changed
16
+
17
+ - **Log timestamps now include date** — format changed from `HH:MM:SS` to `YYYY-MM-DD HH:MM:SS` so entries from different days are distinguishable.
18
+
8
19
  ## [1.3.0] - 2026-04-12
9
20
 
10
21
  ### Added
@@ -2,7 +2,7 @@
2
2
  "id": "agent-discover",
3
3
  "name": "Discover",
4
4
  "icon": "explore",
5
- "version": "1.3.0",
5
+ "version": "1.3.1",
6
6
  "description": "MCP server registry — browse, install, configure, monitor",
7
7
  "ui": "./dist/ui/app.js",
8
8
  "css": "./dist/ui/styles.css",
package/dist/ui/app.js CHANGED
@@ -22,7 +22,7 @@
22
22
  let openSections = {};
23
23
  let prereqs = null;
24
24
  let logEntries = [];
25
- let logFilter = { server: '', status: '' };
25
+ let logFilter = { server: '', status: '', search: '', from: '', to: '' };
26
26
 
27
27
  // -------------------------------------------------------------------------
28
28
  // WebSocket
@@ -1211,6 +1211,9 @@
1211
1211
  function initLogFilters() {
1212
1212
  var serverSel = AD._root.getElementById('log-filter-server');
1213
1213
  var statusSel = AD._root.getElementById('log-filter-status');
1214
+ var searchInput = AD._root.getElementById('log-filter-search');
1215
+ var fromInput = AD._root.getElementById('log-filter-from');
1216
+ var toInput = AD._root.getElementById('log-filter-to');
1214
1217
  if (serverSel)
1215
1218
  serverSel.addEventListener('change', function () {
1216
1219
  logFilter.server = this.value;
@@ -1221,6 +1224,21 @@
1221
1224
  logFilter.status = this.value;
1222
1225
  renderLogs();
1223
1226
  });
1227
+ if (searchInput)
1228
+ searchInput.addEventListener('input', function () {
1229
+ logFilter.search = this.value;
1230
+ renderLogs();
1231
+ });
1232
+ if (fromInput)
1233
+ fromInput.addEventListener('change', function () {
1234
+ logFilter.from = this.value;
1235
+ renderLogs();
1236
+ });
1237
+ if (toInput)
1238
+ toInput.addEventListener('change', function () {
1239
+ logFilter.to = this.value;
1240
+ renderLogs();
1241
+ });
1224
1242
  }
1225
1243
 
1226
1244
  function fetchLogs() {
@@ -1242,10 +1260,30 @@
1242
1260
  var el = AD._root.getElementById('logs-list');
1243
1261
  if (!el) return;
1244
1262
 
1263
+ var fromTs = logFilter.from ? new Date(logFilter.from).getTime() : 0;
1264
+ var toTs = logFilter.to ? new Date(logFilter.to).getTime() : Infinity;
1265
+ var q = (logFilter.search || '').toLowerCase();
1266
+
1245
1267
  var filtered = logEntries.filter(function (e) {
1246
1268
  if (logFilter.server && e.server !== logFilter.server) return false;
1247
1269
  if (logFilter.status === 'success' && !e.success) return false;
1248
1270
  if (logFilter.status === 'fail' && e.success) return false;
1271
+ if (e.timestamp) {
1272
+ var t = new Date(e.timestamp).getTime();
1273
+ if (t < fromTs || t > toTs) return false;
1274
+ }
1275
+ if (q) {
1276
+ var haystack = (
1277
+ e.server +
1278
+ ' ' +
1279
+ e.tool +
1280
+ ' ' +
1281
+ JSON.stringify(e.args) +
1282
+ ' ' +
1283
+ (e.response || '')
1284
+ ).toLowerCase();
1285
+ if (haystack.indexOf(q) === -1) return false;
1286
+ }
1249
1287
  return true;
1250
1288
  });
1251
1289
 
@@ -1259,7 +1297,22 @@
1259
1297
  var cols = 5;
1260
1298
  var rows = filtered
1261
1299
  .map(function (e) {
1262
- var ts = e.timestamp ? new Date(e.timestamp).toLocaleTimeString() : '';
1300
+ var ts = '';
1301
+ if (e.timestamp) {
1302
+ var d = new Date(e.timestamp);
1303
+ ts =
1304
+ d.getFullYear() +
1305
+ '-' +
1306
+ String(d.getMonth() + 1).padStart(2, '0') +
1307
+ '-' +
1308
+ String(d.getDate()).padStart(2, '0') +
1309
+ ' ' +
1310
+ String(d.getHours()).padStart(2, '0') +
1311
+ ':' +
1312
+ String(d.getMinutes()).padStart(2, '0') +
1313
+ ':' +
1314
+ String(d.getSeconds()).padStart(2, '0');
1315
+ }
1263
1316
  var badge = e.success
1264
1317
  ? '<span class="log-badge log-success">OK</span>'
1265
1318
  : '<span class="log-badge log-fail">FAIL</span>';
@@ -157,6 +157,15 @@
157
157
  <div class="panel-header">
158
158
  <h2 class="section-title">Call Logs</h2>
159
159
  <div class="log-filters">
160
+ <div class="log-filter-search-wrap">
161
+ <span class="material-symbols-outlined" style="font-size: 14px">search</span>
162
+ <input
163
+ type="text"
164
+ id="log-filter-search"
165
+ placeholder="Search logs..."
166
+ autocomplete="off"
167
+ />
168
+ </div>
160
169
  <select id="log-filter-server">
161
170
  <option value="">All servers</option>
162
171
  </select>
@@ -165,6 +174,8 @@
165
174
  <option value="success">Success</option>
166
175
  <option value="fail">Failed</option>
167
176
  </select>
177
+ <input type="datetime-local" id="log-filter-from" title="From" />
178
+ <input type="datetime-local" id="log-filter-to" title="To" />
168
179
  <button class="btn-clear-logs" data-action="clear-logs">
169
180
  <span class="material-symbols-outlined" style="font-size: 14px">delete_sweep</span>
170
181
  Clear All
@@ -1115,9 +1115,11 @@ body {
1115
1115
  display: flex;
1116
1116
  gap: 8px;
1117
1117
  align-items: center;
1118
+ flex-wrap: wrap;
1118
1119
  }
1119
1120
 
1120
- .log-filters select {
1121
+ .log-filters select,
1122
+ .log-filters input[type='datetime-local'] {
1121
1123
  background: var(--bg-elevated);
1122
1124
  border: 1px solid var(--border);
1123
1125
  border-radius: 6px;
@@ -1127,6 +1129,38 @@ body {
1127
1129
  color: var(--text);
1128
1130
  }
1129
1131
 
1132
+ .log-filters input[type='datetime-local']::-webkit-calendar-picker-indicator {
1133
+ filter: invert(0.7);
1134
+ }
1135
+
1136
+ .log-filter-search-wrap {
1137
+ display: flex;
1138
+ align-items: center;
1139
+ gap: 4px;
1140
+ background: var(--bg-elevated);
1141
+ border: 1px solid var(--border);
1142
+ border-radius: 6px;
1143
+ padding: 4px 8px;
1144
+ }
1145
+
1146
+ .log-filter-search-wrap .material-symbols-outlined {
1147
+ color: var(--text-dim);
1148
+ }
1149
+
1150
+ .log-filter-search-wrap input {
1151
+ background: none;
1152
+ border: none;
1153
+ outline: none;
1154
+ font-size: 12px;
1155
+ font-family: var(--font-mono);
1156
+ color: var(--text);
1157
+ width: 140px;
1158
+ }
1159
+
1160
+ .log-filter-search-wrap input::placeholder {
1161
+ color: var(--text-dim);
1162
+ }
1163
+
1130
1164
  .logs-table {
1131
1165
  width: 100%;
1132
1166
  border-collapse: collapse;
@@ -103,8 +103,11 @@ AD._template = function () {
103
103
  '<div class="panel-header">' +
104
104
  '<h2 class="section-title">Call Logs</h2>' +
105
105
  '<div class="log-filters">' +
106
+ '<div class="log-filter-search-wrap"><span class="material-symbols-outlined" style="font-size:14px">search</span><input type="text" id="log-filter-search" placeholder="Search logs..." autocomplete="off" /></div>' +
106
107
  '<select id="log-filter-server"><option value="">All servers</option></select>' +
107
108
  '<select id="log-filter-status"><option value="">All</option><option value="success">Success</option><option value="fail">Failed</option></select>' +
109
+ '<input type="datetime-local" id="log-filter-from" title="From" />' +
110
+ '<input type="datetime-local" id="log-filter-to" title="To" />' +
108
111
  '<button class="btn-clear-logs" data-action="clear-logs"><span class="material-symbols-outlined" style="font-size:14px">delete_sweep</span> Clear All</button>' +
109
112
  '</div>' +
110
113
  '</div>' +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-discover",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
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",