averecion-lite 1.5.0 → 1.5.2
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/dashboard/dash.css +65 -3
- package/dashboard/dash.js +24 -1
- package/dashboard/index.html +185 -179
- package/package.json +1 -1
package/dashboard/dash.css
CHANGED
|
@@ -345,15 +345,38 @@ body {
|
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
.dash-main {
|
|
348
|
-
max-width:
|
|
348
|
+
max-width: 1400px;
|
|
349
349
|
margin: 0 auto;
|
|
350
350
|
padding: 2rem;
|
|
351
351
|
}
|
|
352
352
|
|
|
353
|
+
.dash-columns {
|
|
354
|
+
display: grid;
|
|
355
|
+
grid-template-columns: 1fr 1fr;
|
|
356
|
+
gap: 2rem;
|
|
357
|
+
margin-top: 1rem;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.dash-col-left,
|
|
361
|
+
.dash-col-right {
|
|
362
|
+
display: flex;
|
|
363
|
+
flex-direction: column;
|
|
364
|
+
gap: 0;
|
|
365
|
+
}
|
|
366
|
+
|
|
353
367
|
.dash-main section {
|
|
354
368
|
margin-bottom: 2rem;
|
|
355
369
|
}
|
|
356
370
|
|
|
371
|
+
@media (max-width: 1024px) {
|
|
372
|
+
.dash-columns {
|
|
373
|
+
grid-template-columns: 1fr;
|
|
374
|
+
}
|
|
375
|
+
.dash-main {
|
|
376
|
+
max-width: 800px;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
357
380
|
.dash-main h2 {
|
|
358
381
|
font-size: 1.25rem;
|
|
359
382
|
margin-bottom: 1rem;
|
|
@@ -1140,10 +1163,14 @@ body {
|
|
|
1140
1163
|
.security-arch-grid {
|
|
1141
1164
|
display: grid;
|
|
1142
1165
|
grid-template-columns: repeat(2, 1fr);
|
|
1143
|
-
gap:
|
|
1166
|
+
gap: 0.75rem;
|
|
1144
1167
|
margin-top: 1rem;
|
|
1145
1168
|
}
|
|
1146
1169
|
|
|
1170
|
+
.dash-col-right .security-arch-grid {
|
|
1171
|
+
grid-template-columns: 1fr;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1147
1174
|
.arch-item {
|
|
1148
1175
|
background: var(--bg-card);
|
|
1149
1176
|
border: 1px solid var(--border);
|
|
@@ -1271,13 +1298,48 @@ body {
|
|
|
1271
1298
|
.threat-summary-badge.low { background: rgba(96, 165, 250, 0.2); color: #60a5fa; }
|
|
1272
1299
|
.threat-summary-badge.passed { background: rgba(34, 197, 94, 0.2); color: var(--success); }
|
|
1273
1300
|
|
|
1301
|
+
.threat-findings-toggle {
|
|
1302
|
+
display: flex;
|
|
1303
|
+
align-items: center;
|
|
1304
|
+
gap: 0.5rem;
|
|
1305
|
+
margin-top: 0.75rem;
|
|
1306
|
+
padding: 0.5rem 0.75rem;
|
|
1307
|
+
background: var(--bg-card);
|
|
1308
|
+
border: 1px solid var(--border);
|
|
1309
|
+
border-radius: 8px;
|
|
1310
|
+
cursor: pointer;
|
|
1311
|
+
color: var(--text-secondary);
|
|
1312
|
+
font-size: 0.8rem;
|
|
1313
|
+
transition: all 0.2s;
|
|
1314
|
+
width: 100%;
|
|
1315
|
+
text-align: left;
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
.threat-findings-toggle:hover {
|
|
1319
|
+
border-color: var(--primary, #7c3aed);
|
|
1320
|
+
color: var(--text-primary);
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
.threat-findings-toggle .toggle-arrow {
|
|
1324
|
+
transition: transform 0.2s;
|
|
1325
|
+
font-size: 0.7rem;
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
.threat-findings-toggle.expanded .toggle-arrow {
|
|
1329
|
+
transform: rotate(90deg);
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1274
1332
|
.threat-findings {
|
|
1275
|
-
margin-top:
|
|
1333
|
+
margin-top: 0.5rem;
|
|
1276
1334
|
display: flex;
|
|
1277
1335
|
flex-direction: column;
|
|
1278
1336
|
gap: 0.5rem;
|
|
1279
1337
|
}
|
|
1280
1338
|
|
|
1339
|
+
.threat-findings.collapsed {
|
|
1340
|
+
display: none;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1281
1343
|
.threat-finding {
|
|
1282
1344
|
background: var(--bg-card);
|
|
1283
1345
|
border: 1px solid var(--border);
|
package/dashboard/dash.js
CHANGED
|
@@ -977,7 +977,6 @@
|
|
|
977
977
|
|
|
978
978
|
function renderThreatResults(data, scoreDisplay, findingsEl) {
|
|
979
979
|
scoreDisplay.classList.remove("hidden");
|
|
980
|
-
findingsEl.classList.remove("hidden");
|
|
981
980
|
|
|
982
981
|
const gradeEl = document.getElementById("threat-grade");
|
|
983
982
|
const scoreVal = document.getElementById("threat-score-value");
|
|
@@ -998,6 +997,30 @@
|
|
|
998
997
|
const failed = data.findings.filter(f => !f.passed);
|
|
999
998
|
const passed = data.findings.filter(f => f.passed);
|
|
1000
999
|
const sorted = [...failed, ...passed];
|
|
1000
|
+
const failCount = failed.length;
|
|
1001
|
+
|
|
1002
|
+
let existingToggle = document.querySelector(".threat-findings-toggle");
|
|
1003
|
+
if (!existingToggle) {
|
|
1004
|
+
existingToggle = document.createElement("button");
|
|
1005
|
+
existingToggle.className = "threat-findings-toggle";
|
|
1006
|
+
existingToggle.setAttribute("data-testid", "btn-findings-toggle");
|
|
1007
|
+
findingsEl.parentNode.insertBefore(existingToggle, findingsEl);
|
|
1008
|
+
existingToggle.addEventListener("click", () => {
|
|
1009
|
+
const isCollapsed = findingsEl.classList.contains("collapsed");
|
|
1010
|
+
if (isCollapsed) {
|
|
1011
|
+
findingsEl.classList.remove("collapsed");
|
|
1012
|
+
existingToggle.classList.add("expanded");
|
|
1013
|
+
} else {
|
|
1014
|
+
findingsEl.classList.add("collapsed");
|
|
1015
|
+
existingToggle.classList.remove("expanded");
|
|
1016
|
+
}
|
|
1017
|
+
existingToggle.querySelector(".toggle-label").textContent =
|
|
1018
|
+
findingsEl.classList.contains("collapsed") ? `Show ${data.findings.length} findings (${failCount} issues)` : "Hide findings";
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
1021
|
+
existingToggle.innerHTML = `<span class="toggle-arrow">▶</span> <span class="toggle-label">Show ${data.findings.length} findings (${failCount} issues)</span>`;
|
|
1022
|
+
findingsEl.classList.add("collapsed");
|
|
1023
|
+
existingToggle.classList.remove("expanded");
|
|
1001
1024
|
|
|
1002
1025
|
findingsEl.innerHTML = sorted.map(f => {
|
|
1003
1026
|
const sevIcon = f.passed ? "✓" : (f.severity === "critical" ? "!!" : f.severity === "high" ? "!" : f.severity === "medium" ? "~" : "·");
|
package/dashboard/index.html
CHANGED
|
@@ -148,200 +148,206 @@
|
|
|
148
148
|
</div>
|
|
149
149
|
</section>
|
|
150
150
|
|
|
151
|
-
<
|
|
152
|
-
<div class="
|
|
153
|
-
<
|
|
154
|
-
<
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
151
|
+
<div class="dash-columns">
|
|
152
|
+
<div class="dash-col-left">
|
|
153
|
+
<section class="bot-section">
|
|
154
|
+
<h2>Activity Summary</h2>
|
|
155
|
+
<div class="bot-card" data-testid="card-bot">
|
|
156
|
+
<div class="bot-avatar">🛡️</div>
|
|
157
|
+
<div class="bot-info">
|
|
158
|
+
<div class="bot-name">Clawguard</div>
|
|
159
|
+
<div class="bot-status online" id="clawguard-status">● Active</div>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="bot-stats">
|
|
162
|
+
<div class="stat">
|
|
163
|
+
<span class="stat-value" id="stat-approved">0</span>
|
|
164
|
+
<span class="stat-label">Monitored</span>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="stat">
|
|
167
|
+
<span class="stat-value warning" id="stat-blocked">0</span>
|
|
168
|
+
<span class="stat-label">Flagged</span>
|
|
169
|
+
</div>
|
|
170
|
+
<div class="stat">
|
|
171
|
+
<span class="stat-value attack" id="stat-manual">0</span>
|
|
172
|
+
<span class="stat-label">Attacks</span>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
173
175
|
</div>
|
|
174
|
-
</
|
|
175
|
-
</div>
|
|
176
|
-
</section>
|
|
177
|
-
|
|
178
|
-
<section class="safety-section">
|
|
179
|
-
<h2>Safety Checks</h2>
|
|
180
|
-
<div class="safety-grid">
|
|
181
|
-
<div class="safety-item pass" id="check-local" data-testid="check-local">
|
|
182
|
-
<span class="check-icon">✓</span>
|
|
183
|
-
<span>Dashboard is local-only</span>
|
|
184
|
-
<span class="legend-help" data-tooltip="Only you can see this dashboard - no remote access">?</span>
|
|
185
|
-
</div>
|
|
186
|
-
<div class="safety-item pass" id="check-secret" data-testid="check-secret">
|
|
187
|
-
<span class="check-icon">✓</span>
|
|
188
|
-
<span>Secret key protected</span>
|
|
189
|
-
<span class="legend-help" data-tooltip="Your dashboard is locked with a secret key">?</span>
|
|
190
|
-
</div>
|
|
191
|
-
<div class="safety-item pass" id="check-injection" data-testid="check-injection">
|
|
192
|
-
<span class="check-icon">✓</span>
|
|
193
|
-
<span>Prompt injection detection active</span>
|
|
194
|
-
<span class="legend-help" data-tooltip="Detecting hidden attack instructions in real-time">?</span>
|
|
195
|
-
</div>
|
|
196
|
-
</div>
|
|
197
|
-
</section>
|
|
198
|
-
|
|
199
|
-
<section class="security-arch-section">
|
|
200
|
-
<h2>Dashboard Security <span class="legend-help" data-tooltip="Why your bot can never access or tamper with this dashboard">?</span></h2>
|
|
201
|
-
<div class="security-arch-grid">
|
|
202
|
-
<div class="arch-item">
|
|
203
|
-
<div class="arch-icon">🔒</div>
|
|
204
|
-
<div class="arch-title">Local-Only Binding</div>
|
|
205
|
-
<div class="arch-desc">Dashboard listens on localhost only. No external network can reach it — even if your server is public.</div>
|
|
206
|
-
</div>
|
|
207
|
-
<div class="arch-item">
|
|
208
|
-
<div class="arch-icon">🔑</div>
|
|
209
|
-
<div class="arch-title">Secret Key Auth</div>
|
|
210
|
-
<div class="arch-desc">Every request requires a secret key your bot never sees. Even local processes can't access data without it.</div>
|
|
211
|
-
</div>
|
|
212
|
-
<div class="arch-item">
|
|
213
|
-
<div class="arch-icon">👁️</div>
|
|
214
|
-
<div class="arch-title">Passive Monitoring</div>
|
|
215
|
-
<div class="arch-desc">Clawguard only reads log files — it never writes to the bot, sends commands, or modifies any configuration.</div>
|
|
216
|
-
</div>
|
|
217
|
-
<div class="arch-item">
|
|
218
|
-
<div class="arch-icon">🚫</div>
|
|
219
|
-
<div class="arch-title">No Write-Back Path</div>
|
|
220
|
-
<div class="arch-desc">There is no API, socket, or channel from the dashboard back to your bot. The connection is strictly one-way.</div>
|
|
221
|
-
</div>
|
|
222
|
-
</div>
|
|
223
|
-
</section>
|
|
176
|
+
</section>
|
|
224
177
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
<div class="threat-score-display hidden" id="threat-score-display">
|
|
230
|
-
<div class="threat-grade" id="threat-grade">-</div>
|
|
231
|
-
<div class="threat-score-info">
|
|
232
|
-
<span class="threat-score-value" id="threat-score-value">-/100</span>
|
|
233
|
-
<span class="threat-score-label">Security Score</span>
|
|
178
|
+
<!-- Approvals section hidden in lite monitoring mode -->
|
|
179
|
+
<section class="approvals-section" id="approvals-section" style="display: none;">
|
|
180
|
+
<h2>Flagged for Review <span class="approval-count" id="approval-count">0</span></h2>
|
|
181
|
+
<div class="approvals-list" id="approvals-list" data-testid="list-approvals">
|
|
234
182
|
</div>
|
|
235
|
-
|
|
236
|
-
</div>
|
|
237
|
-
</div>
|
|
238
|
-
<div class="threat-findings hidden" id="threat-findings" data-testid="threat-findings"></div>
|
|
239
|
-
</section>
|
|
183
|
+
</section>
|
|
240
184
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
<div class="ext-name">Skills</div>
|
|
248
|
-
<div class="ext-status" id="skills-status">Not configured</div>
|
|
249
|
-
</div>
|
|
250
|
-
<div class="ext-count" id="skills-count">0</div>
|
|
251
|
-
</div>
|
|
252
|
-
<div class="extension-card" data-type="tools">
|
|
253
|
-
<div class="ext-icon">🔧</div>
|
|
254
|
-
<div class="ext-info">
|
|
255
|
-
<div class="ext-name">MCP Tools</div>
|
|
256
|
-
<div class="ext-status" id="tools-status">Not configured</div>
|
|
257
|
-
</div>
|
|
258
|
-
<div class="ext-count" id="tools-count">0</div>
|
|
259
|
-
</div>
|
|
260
|
-
<div class="extension-card" data-type="plugins">
|
|
261
|
-
<div class="ext-icon">🔌</div>
|
|
262
|
-
<div class="ext-info">
|
|
263
|
-
<div class="ext-name">Plugins</div>
|
|
264
|
-
<div class="ext-status" id="plugins-status">Not configured</div>
|
|
185
|
+
<section class="activity-section">
|
|
186
|
+
<h2>Recent Activity</h2>
|
|
187
|
+
<div class="activity-list" id="activity-list" data-testid="list-activity">
|
|
188
|
+
<div class="activity-empty">
|
|
189
|
+
<p>🦞 Your bot hasn't done anything yet. When it does, you'll see it here!</p>
|
|
190
|
+
</div>
|
|
265
191
|
</div>
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
<
|
|
269
|
-
<
|
|
270
|
-
<div class="
|
|
271
|
-
<
|
|
272
|
-
<div class="ext-status" id="bash-status">Monitoring</div>
|
|
192
|
+
</section>
|
|
193
|
+
|
|
194
|
+
<section class="chart-section">
|
|
195
|
+
<h2>Last 24 Hours</h2>
|
|
196
|
+
<div class="chart-container">
|
|
197
|
+
<canvas id="chart-timeline" height="120"></canvas>
|
|
273
198
|
</div>
|
|
274
|
-
|
|
275
|
-
</div>
|
|
199
|
+
</section>
|
|
276
200
|
</div>
|
|
277
|
-
</section>
|
|
278
201
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
202
|
+
<div class="dash-col-right">
|
|
203
|
+
<section class="protection-section">
|
|
204
|
+
<div class="protection-score" data-testid="protection-score">
|
|
205
|
+
<div class="score-header">
|
|
206
|
+
<span class="score-value" id="score-value">4/4</span>
|
|
207
|
+
<span class="score-label">Protection Score</span>
|
|
208
|
+
</div>
|
|
209
|
+
<div class="score-bars">
|
|
210
|
+
<div class="score-bar active" id="bar-local" data-tooltip="Dashboard only accessible from your computer">
|
|
211
|
+
<span class="bar-icon">🏠</span>
|
|
212
|
+
<span class="bar-label">Local Only</span>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="score-bar active" id="bar-secret" data-tooltip="Your dashboard is protected by a secret key">
|
|
215
|
+
<span class="bar-icon">🔑</span>
|
|
216
|
+
<span class="bar-label">Secret Key</span>
|
|
217
|
+
</div>
|
|
218
|
+
<div class="score-bar active" id="bar-injection" data-tooltip="Detecting prompt injection attempts in real-time">
|
|
219
|
+
<span class="bar-icon">🛡️</span>
|
|
220
|
+
<span class="bar-label">Injection Detection</span>
|
|
221
|
+
</div>
|
|
222
|
+
<div class="score-bar active" id="bar-approval" data-tooltip="Real-time visibility into all agent activity">
|
|
223
|
+
<span class="bar-icon">👁️</span>
|
|
224
|
+
<span class="bar-label">Live Monitoring</span>
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
295
227
|
</div>
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
228
|
+
</section>
|
|
229
|
+
|
|
230
|
+
<section class="safety-section">
|
|
231
|
+
<h2>Safety Checks</h2>
|
|
232
|
+
<div class="safety-grid">
|
|
233
|
+
<div class="safety-item pass" id="check-local" data-testid="check-local">
|
|
234
|
+
<span class="check-icon">✓</span>
|
|
235
|
+
<span>Dashboard is local-only</span>
|
|
236
|
+
<span class="legend-help" data-tooltip="Only you can see this dashboard - no remote access">?</span>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="safety-item pass" id="check-secret" data-testid="check-secret">
|
|
239
|
+
<span class="check-icon">✓</span>
|
|
240
|
+
<span>Secret key protected</span>
|
|
241
|
+
<span class="legend-help" data-tooltip="Your dashboard is locked with a secret key">?</span>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="safety-item pass" id="check-injection" data-testid="check-injection">
|
|
244
|
+
<span class="check-icon">✓</span>
|
|
245
|
+
<span>Prompt injection detection active</span>
|
|
246
|
+
<span class="legend-help" data-tooltip="Detecting hidden attack instructions in real-time">?</span>
|
|
247
|
+
</div>
|
|
299
248
|
</div>
|
|
300
|
-
</
|
|
301
|
-
</div>
|
|
302
|
-
</section>
|
|
249
|
+
</section>
|
|
303
250
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
251
|
+
<section class="security-arch-section">
|
|
252
|
+
<h2>Dashboard Security <span class="legend-help" data-tooltip="Why your bot can never access or tamper with this dashboard">?</span></h2>
|
|
253
|
+
<div class="security-arch-grid">
|
|
254
|
+
<div class="arch-item">
|
|
255
|
+
<div class="arch-icon">🔒</div>
|
|
256
|
+
<div class="arch-title">Local-Only Binding</div>
|
|
257
|
+
<div class="arch-desc">Dashboard listens on localhost only. No external network can reach it — even if your server is public.</div>
|
|
258
|
+
</div>
|
|
259
|
+
<div class="arch-item">
|
|
260
|
+
<div class="arch-icon">🔑</div>
|
|
261
|
+
<div class="arch-title">Secret Key Auth</div>
|
|
262
|
+
<div class="arch-desc">Every request requires a secret key your bot never sees. Even local processes can't access data without it.</div>
|
|
263
|
+
</div>
|
|
264
|
+
<div class="arch-item">
|
|
265
|
+
<div class="arch-icon">👁️</div>
|
|
266
|
+
<div class="arch-title">Passive Monitoring</div>
|
|
267
|
+
<div class="arch-desc">Clawguard only reads log files — it never writes to the bot, sends commands, or modifies any configuration.</div>
|
|
268
|
+
</div>
|
|
269
|
+
<div class="arch-item">
|
|
270
|
+
<div class="arch-icon">🚫</div>
|
|
271
|
+
<div class="arch-title">No Write-Back Path</div>
|
|
272
|
+
<div class="arch-desc">There is no API, socket, or channel from the dashboard back to your bot. The connection is strictly one-way.</div>
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
</section>
|
|
322
276
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
277
|
+
<section class="threat-section" id="threat-section">
|
|
278
|
+
<h2>Threat Assessment <span class="legend-help" data-tooltip="Holistic security scan of your server">?</span></h2>
|
|
279
|
+
<div class="threat-header" id="threat-header">
|
|
280
|
+
<button class="threat-scan-btn" id="btn-scan" data-testid="btn-scan">🔍 Run Security Scan</button>
|
|
281
|
+
<div class="threat-score-display hidden" id="threat-score-display">
|
|
282
|
+
<div class="threat-grade" id="threat-grade">-</div>
|
|
283
|
+
<div class="threat-score-info">
|
|
284
|
+
<span class="threat-score-value" id="threat-score-value">-/100</span>
|
|
285
|
+
<span class="threat-score-label">Security Score</span>
|
|
286
|
+
</div>
|
|
287
|
+
<div class="threat-summary" id="threat-summary"></div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
<div class="threat-findings collapsed" id="threat-findings" data-testid="threat-findings"></div>
|
|
291
|
+
</section>
|
|
329
292
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
293
|
+
<section class="control-section">
|
|
294
|
+
<h2>Protection Level</h2>
|
|
295
|
+
<div class="protection-toggle" data-testid="protection-toggle">
|
|
296
|
+
<button class="toggle-btn" data-level="relaxed" data-testid="toggle-relaxed">
|
|
297
|
+
<span class="toggle-emoji">😊</span>
|
|
298
|
+
<span class="toggle-name">Relaxed</span>
|
|
299
|
+
</button>
|
|
300
|
+
<button class="toggle-btn active" data-level="balanced" data-testid="toggle-balanced">
|
|
301
|
+
<span class="toggle-emoji">⚖️</span>
|
|
302
|
+
<span class="toggle-name">Balanced</span>
|
|
303
|
+
</button>
|
|
304
|
+
<button class="toggle-btn" data-level="strict" data-testid="toggle-strict">
|
|
305
|
+
<span class="toggle-emoji">🔒</span>
|
|
306
|
+
<span class="toggle-name">Strict</span>
|
|
307
|
+
</button>
|
|
308
|
+
</div>
|
|
309
|
+
<p class="control-hint" id="level-hint">Flag risky actions for review</p>
|
|
310
|
+
</section>
|
|
338
311
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
312
|
+
<section class="extensions-section">
|
|
313
|
+
<h2>ClawdBot Extensions <span class="extension-count" id="extension-count">0</span></h2>
|
|
314
|
+
<div class="extensions-grid" id="extensions-grid" data-testid="grid-extensions">
|
|
315
|
+
<div class="extension-card" data-type="skills">
|
|
316
|
+
<div class="ext-icon">🎯</div>
|
|
317
|
+
<div class="ext-info">
|
|
318
|
+
<div class="ext-name">Skills</div>
|
|
319
|
+
<div class="ext-status" id="skills-status">Not configured</div>
|
|
320
|
+
</div>
|
|
321
|
+
<div class="ext-count" id="skills-count">0</div>
|
|
322
|
+
</div>
|
|
323
|
+
<div class="extension-card" data-type="tools">
|
|
324
|
+
<div class="ext-icon">🔧</div>
|
|
325
|
+
<div class="ext-info">
|
|
326
|
+
<div class="ext-name">MCP Tools</div>
|
|
327
|
+
<div class="ext-status" id="tools-status">Not configured</div>
|
|
328
|
+
</div>
|
|
329
|
+
<div class="ext-count" id="tools-count">0</div>
|
|
330
|
+
</div>
|
|
331
|
+
<div class="extension-card" data-type="plugins">
|
|
332
|
+
<div class="ext-icon">🔌</div>
|
|
333
|
+
<div class="ext-info">
|
|
334
|
+
<div class="ext-name">Plugins</div>
|
|
335
|
+
<div class="ext-status" id="plugins-status">Not configured</div>
|
|
336
|
+
</div>
|
|
337
|
+
<div class="ext-count" id="plugins-count">0</div>
|
|
338
|
+
</div>
|
|
339
|
+
<div class="extension-card" data-type="bash">
|
|
340
|
+
<div class="ext-icon">💻</div>
|
|
341
|
+
<div class="ext-info">
|
|
342
|
+
<div class="ext-name">Bash/Shell</div>
|
|
343
|
+
<div class="ext-status" id="bash-status">Monitoring</div>
|
|
344
|
+
</div>
|
|
345
|
+
<div class="ext-count" id="bash-count">✓</div>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
348
|
+
</section>
|
|
343
349
|
</div>
|
|
344
|
-
</
|
|
350
|
+
</div>
|
|
345
351
|
</main>
|
|
346
352
|
|
|
347
353
|
<footer class="dash-footer">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "averecion-lite",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
4
4
|
"description": "Real-time AI agent monitoring - watches logs, detects dangerous commands and prompt injection attempts",
|
|
5
5
|
"author": "Averecion <hello@averecion.com>",
|
|
6
6
|
"homepage": "https://github.com/averecion/clawguard#readme",
|