From 1d48dbe7d501eb7b59dc730e117a8f81ced34b4c Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 13 Mar 2026 18:02:44 +0100 Subject: [PATCH] save with verify and restart new session --- diagnostic/index.html | 33 ++++++++++++++++++++++++++++----- diagnostic/server.js | 32 +++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/diagnostic/index.html b/diagnostic/index.html index 44dd54d..d6a0268 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -581,8 +581,16 @@ if (msg.type === 'permissions_saved') { const s = document.getElementById('perms-status'); s.style.display = 'block'; - if (msg.ok) { s.style.color = '#34C759'; s.textContent = 'Berechtigungen gespeichert!'; loadPermissions(); } - else { s.style.color = '#FF6B6B'; s.textContent = 'Fehler: ' + (msg.error || '?'); } + if (msg.ok) { + s.style.color = '#34C759'; + s.innerHTML = (msg.info || 'Berechtigungen gespeichert!') + + '
Aenderungen werden erst bei einer neuen Session wirksam.' + + ' '; + loadPermissions(); + } else { + s.style.color = '#FF6B6B'; + s.textContent = 'Fehler: ' + (msg.error || '?'); + } return; } if (msg.type === 'model_info') { @@ -1222,12 +1230,12 @@ status.style.display = 'none'; } - // Merge: Server-Daten als Basis, unbekannte Tools default an + // Merge: Server-Daten als Basis permState = {}; const serverPerms = data.permissions || {}; + const hasExplicitList = Array.isArray(data.allowedTools) && data.allowedTools.length > 0; for (const tool of TOOL_DEFS) { - // Wenn Server explizit sagt: check allowedTools - if (data.allowedTools && data.allowedTools.length > 0) { + if (hasExplicitList) { permState[tool.id] = data.allowedTools.includes(tool.id); } else if (serverPerms[tool.id] !== undefined) { permState[tool.id] = !!serverPerms[tool.id]; @@ -1235,6 +1243,12 @@ permState[tool.id] = true; // Default: an } } + // Hinweis wenn kein expliziter Filter gesetzt ist + if (!hasExplicitList && !Object.keys(serverPerms).length) { + status.style.display = 'block'; + status.style.color = '#FFD60A'; + status.textContent = (data.info || '') + ' — Kein Tool-Filter gesetzt: alle Tools sind erlaubt. Speichern um explizit zu setzen.'; + } // Gruppieren nach Kategorie const cats = {}; @@ -1272,6 +1286,15 @@ document.getElementById('btn-save-perms').disabled = true; } + function restartAriaSession() { + if (!confirm('Neue Session starten? Die aktuelle Session bleibt erhalten aber wird inaktiv.')) return; + const ts = Date.now().toString(36); + send({ action: 'create_session', sessionName: `aria-${ts}` }); + const s = document.getElementById('perms-status'); + s.style.color = '#34C759'; + s.textContent = 'Neue Session wird gestartet...'; + } + // ── Einstellungen: Model ──────────────────────────────── function loadModel() { diff --git a/diagnostic/server.js b/diagnostic/server.js index a8a11b0..fd585c9 100644 --- a/diagnostic/server.js +++ b/diagnostic/server.js @@ -1473,12 +1473,38 @@ async function handleSavePermissions(clientWs, allowedTools) { `const dir=f.substring(0,f.lastIndexOf("/"));`, 'try{fs.mkdirSync(dir,{recursive:true});}catch(e){}', 'fs.writeFileSync(f,JSON.stringify(s,null,2));', + // Verify: zuruecklesen und pruefen + 'const v=JSON.parse(fs.readFileSync(f,"utf8"));', + 'process.stdout.write(JSON.stringify(v.allowedTools||[]));', ].join(""); const b64 = Buffer.from(script).toString("base64"); - await dockerExec("aria-core", `echo ${b64} | base64 -d | node`); + const verifyRaw = await dockerExec("aria-core", `echo ${b64} | base64 -d | node`); - clientWs.send(JSON.stringify({ type: "permissions_saved", ok: true })); - log("info", "server", "Berechtigungen gespeichert"); + // Verify: gespeicherte Daten mit gewuenschten vergleichen + let verified = false; + let savedTools = []; + try { + savedTools = JSON.parse(verifyRaw.trim()); + verified = Array.isArray(savedTools) + && savedTools.length === allowedTools.length + && allowedTools.every(t => savedTools.includes(t)); + } catch {} + + if (!verified) { + log("error", "server", `Verify fehlgeschlagen! Erwartet: ${JSON.stringify(allowedTools)}, Gelesen: ${verifyRaw}`); + clientWs.send(JSON.stringify({ + type: "permissions_saved", ok: false, + error: `Verify fehlgeschlagen — Datei wurde nicht korrekt geschrieben. Erwartet ${allowedTools.length} Tools, gelesen: ${savedTools.length}`, + })); + return; + } + + clientWs.send(JSON.stringify({ + type: "permissions_saved", ok: true, + info: `${allowedTools.length} Tools gespeichert und verifiziert in ${settingsPath}`, + needsRestart: true, + })); + log("info", "server", `Berechtigungen gespeichert und verifiziert (${allowedTools.length} Tools)`); } catch (err) { log("error", "server", `Berechtigungen speichern fehlgeschlagen: ${err.message}`); clientWs.send(JSON.stringify({ type: "permissions_saved", ok: false, error: err.message }));