Changes, bugfixes and updates to the matrix. Added 1.2v batteries
This commit is contained in:
@@ -1202,8 +1202,6 @@ function initAudit() {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.value = "";
|
||||
});
|
||||
const cb = document.getElementById("filter-confirmed");
|
||||
if (cb) cb.checked = false;
|
||||
const banner = document.getElementById("audit-task-filter-banner");
|
||||
if (banner) {
|
||||
banner.textContent = `Showing entries for run ${_auditTaskId.slice(0, 8)}…`;
|
||||
@@ -1218,7 +1216,6 @@ function initAudit() {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.value = "";
|
||||
});
|
||||
document.getElementById("filter-confirmed").checked = false;
|
||||
_auditTaskId = "";
|
||||
const banner = document.getElementById("audit-task-filter-banner");
|
||||
if (banner) banner.style.display = "none";
|
||||
@@ -1235,8 +1232,6 @@ async function loadAudit(page) {
|
||||
const end = document.getElementById("filter-end")?.value;
|
||||
const tool = document.getElementById("filter-tool")?.value;
|
||||
const session = document.getElementById("filter-session")?.value;
|
||||
const confirmed = document.getElementById("filter-confirmed")?.checked;
|
||||
|
||||
const startISO = parseEuDate(start);
|
||||
const endISO = parseEuDate(end, true);
|
||||
if (startISO) params.set("start", startISO);
|
||||
@@ -1244,7 +1239,6 @@ async function loadAudit(page) {
|
||||
if (tool) params.set("tool_name", tool);
|
||||
if (session) params.set("session_id", session);
|
||||
if (_auditTaskId) params.set("task_id", _auditTaskId);
|
||||
if (confirmed) params.set("confirmed_only", "true");
|
||||
params.set("page", auditPage);
|
||||
params.set("per_page", 50);
|
||||
|
||||
@@ -1265,7 +1259,6 @@ function renderAuditTable(data) {
|
||||
<td><code>${esc(e.tool_name)}</code></td>
|
||||
<td class="args-cell">${esc(JSON.stringify(e.arguments).slice(0, 80))}</td>
|
||||
<td>${esc((e.result_summary || "").slice(0, 80))}</td>
|
||||
<td>${e.confirmed ? '<span class="badge badge-green">✓</span>' : '<span class="badge badge-red">✗</span>'}</td>
|
||||
<td><code>${esc((e.session_id || "").slice(0,8))}</code></td>
|
||||
`;
|
||||
tr.addEventListener("click", () => openAuditDetail(e));
|
||||
@@ -1292,9 +1285,6 @@ function openAuditDetail(e) {
|
||||
document.getElementById("audit-detail-ts").textContent = formatDate(e.timestamp);
|
||||
document.getElementById("audit-detail-session").textContent = e.session_id || "—";
|
||||
document.getElementById("audit-detail-task").textContent = e.task_id || "—";
|
||||
document.getElementById("audit-detail-confirmed").innerHTML = e.confirmed
|
||||
? '<span class="badge badge-green">Yes</span>'
|
||||
: '<span class="badge badge-red">No</span>';
|
||||
let _args = e.arguments;
|
||||
if (typeof _args === "string") { try { _args = JSON.parse(_args); } catch {} }
|
||||
document.getElementById("audit-detail-args").textContent =
|
||||
@@ -1411,6 +1401,7 @@ async function saveProviderKey(provider) {
|
||||
document.getElementById(`provider-key-${provider}-input`).value = "";
|
||||
showFlash(`${provider} key saved.`);
|
||||
loadProviderKeys();
|
||||
loadDefaultProvider();
|
||||
} else {
|
||||
const d = await r.json().catch(() => ({}));
|
||||
showFlash(d.detail || "Error saving key.");
|
||||
@@ -1420,7 +1411,7 @@ async function saveProviderKey(provider) {
|
||||
async function clearProviderKey(provider) {
|
||||
if (!confirm(`Clear the ${provider} API key? This may break agent runs that rely on it.`)) return;
|
||||
const r = await fetch(`/api/settings/provider-keys/${provider}`, { method: "DELETE" });
|
||||
if (r.ok) { showFlash(`${provider} key cleared.`); loadProviderKeys(); }
|
||||
if (r.ok) { showFlash(`${provider} key cleared.`); loadProviderKeys(); loadDefaultProvider(); }
|
||||
else showFlash("Error clearing key.");
|
||||
}
|
||||
|
||||
@@ -2448,6 +2439,7 @@ function initSettings() {
|
||||
loadApiKeyStatus();
|
||||
loadProviderKeys();
|
||||
loadUsersBaseFolder();
|
||||
loadDefaultProvider();
|
||||
loadLimits();
|
||||
loadDefaultModels();
|
||||
loadProxyTrust();
|
||||
@@ -2785,13 +2777,56 @@ async function loadLimits() {
|
||||
if (mcrEl) mcrEl.value = data.max_concurrent_runs;
|
||||
if (defaultsEl) {
|
||||
defaultsEl.textContent =
|
||||
`.env defaults: max_tool_calls=${data.defaults.max_tool_calls}, ` +
|
||||
`max_autonomous_runs_per_hour=${data.defaults.max_autonomous_runs_per_hour}, ` +
|
||||
`max_concurrent_runs=${data.defaults.max_concurrent_runs}`;
|
||||
`Built-in defaults: tool_calls=${data.defaults.max_tool_calls}, ` +
|
||||
`runs/hour=${data.defaults.max_autonomous_runs_per_hour}, ` +
|
||||
`concurrent=${data.defaults.max_concurrent_runs}`;
|
||||
}
|
||||
} catch { /* ignore */ }
|
||||
}
|
||||
|
||||
async function loadDefaultProvider() {
|
||||
const sel = document.getElementById("default-provider-select");
|
||||
if (!sel) return;
|
||||
try {
|
||||
const r = await fetch("/api/settings/provider");
|
||||
if (!r.ok) return;
|
||||
const data = await r.json();
|
||||
const labels = { anthropic: "Anthropic", openrouter: "OpenRouter", openai: "OpenAI" };
|
||||
const available = data.available_providers || [];
|
||||
sel.innerHTML = "";
|
||||
if (available.length === 0) {
|
||||
const opt = document.createElement("option");
|
||||
opt.value = "";
|
||||
opt.textContent = "No providers configured";
|
||||
sel.appendChild(opt);
|
||||
sel.disabled = true;
|
||||
sel.closest("section")?.querySelector(".btn")?.setAttribute("disabled", "");
|
||||
return;
|
||||
}
|
||||
for (const p of available) {
|
||||
const opt = document.createElement("option");
|
||||
opt.value = p;
|
||||
opt.textContent = labels[p] || p;
|
||||
sel.appendChild(opt);
|
||||
}
|
||||
sel.disabled = false;
|
||||
sel.closest("section")?.querySelector(".btn")?.removeAttribute("disabled");
|
||||
sel.value = data.default_provider || available[0];
|
||||
} catch { /* ignore */ }
|
||||
}
|
||||
|
||||
async function saveDefaultProvider() {
|
||||
const sel = document.getElementById("default-provider-select");
|
||||
if (!sel) return;
|
||||
const r = await fetch("/api/settings/provider", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ default_provider: sel.value }),
|
||||
});
|
||||
if (r.ok) showFlash("Default provider saved ✓");
|
||||
else showFlash("Error saving default provider");
|
||||
}
|
||||
|
||||
async function loadDefaultModels() {
|
||||
const defSel = document.getElementById("dm-default");
|
||||
const freeSel = document.getElementById("dm-free");
|
||||
@@ -5725,3 +5760,15 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
initNav();
|
||||
_initPage(location.pathname);
|
||||
});
|
||||
|
||||
// Close any open modal on Escape
|
||||
document.addEventListener("keydown", e => {
|
||||
if (e.key !== "Escape") return;
|
||||
const overlay = [...document.querySelectorAll(".modal-overlay")]
|
||||
.find(el => el.style.display !== "none" && !el.classList.contains("hidden"));
|
||||
if (!overlay) return;
|
||||
// Find the ✕ close button, or any button whose onclick closes the modal
|
||||
const closeBtn = [...overlay.querySelectorAll("button")]
|
||||
.find(b => b.textContent.trim() === "✕" || /^close/i.test((b.getAttribute("onclick") || "").trim()));
|
||||
closeBtn?.click();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user