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 }));