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 +11 -0
- package/agent-desk-plugin.json +1 -1
- package/dist/ui/app.js +55 -2
- package/dist/ui/index.html +11 -0
- package/dist/ui/styles.css +35 -1
- package/dist/ui/template.js +3 -0
- package/package.json +1 -1
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
|
package/agent-desk-plugin.json
CHANGED
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 =
|
|
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>';
|
package/dist/ui/index.html
CHANGED
|
@@ -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
|
package/dist/ui/styles.css
CHANGED
|
@@ -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;
|
package/dist/ui/template.js
CHANGED
|
@@ -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