save with verify and restart new session
This commit is contained in:
+28
-5
@@ -581,8 +581,16 @@
|
|||||||
if (msg.type === 'permissions_saved') {
|
if (msg.type === 'permissions_saved') {
|
||||||
const s = document.getElementById('perms-status');
|
const s = document.getElementById('perms-status');
|
||||||
s.style.display = 'block';
|
s.style.display = 'block';
|
||||||
if (msg.ok) { s.style.color = '#34C759'; s.textContent = 'Berechtigungen gespeichert!'; loadPermissions(); }
|
if (msg.ok) {
|
||||||
else { s.style.color = '#FF6B6B'; s.textContent = 'Fehler: ' + (msg.error || '?'); }
|
s.style.color = '#34C759';
|
||||||
|
s.innerHTML = (msg.info || 'Berechtigungen gespeichert!')
|
||||||
|
+ '<br><span style="color:#FFD60A;font-size:10px;">Aenderungen werden erst bei einer neuen Session wirksam.</span>'
|
||||||
|
+ ' <button class="btn secondary" onclick="restartAriaSession()" style="padding:2px 8px;font-size:10px;margin-left:4px;">Session neu starten</button>';
|
||||||
|
loadPermissions();
|
||||||
|
} else {
|
||||||
|
s.style.color = '#FF6B6B';
|
||||||
|
s.textContent = 'Fehler: ' + (msg.error || '?');
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (msg.type === 'model_info') {
|
if (msg.type === 'model_info') {
|
||||||
@@ -1222,12 +1230,12 @@
|
|||||||
status.style.display = 'none';
|
status.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge: Server-Daten als Basis, unbekannte Tools default an
|
// Merge: Server-Daten als Basis
|
||||||
permState = {};
|
permState = {};
|
||||||
const serverPerms = data.permissions || {};
|
const serverPerms = data.permissions || {};
|
||||||
|
const hasExplicitList = Array.isArray(data.allowedTools) && data.allowedTools.length > 0;
|
||||||
for (const tool of TOOL_DEFS) {
|
for (const tool of TOOL_DEFS) {
|
||||||
// Wenn Server explizit sagt: check allowedTools
|
if (hasExplicitList) {
|
||||||
if (data.allowedTools && data.allowedTools.length > 0) {
|
|
||||||
permState[tool.id] = data.allowedTools.includes(tool.id);
|
permState[tool.id] = data.allowedTools.includes(tool.id);
|
||||||
} else if (serverPerms[tool.id] !== undefined) {
|
} else if (serverPerms[tool.id] !== undefined) {
|
||||||
permState[tool.id] = !!serverPerms[tool.id];
|
permState[tool.id] = !!serverPerms[tool.id];
|
||||||
@@ -1235,6 +1243,12 @@
|
|||||||
permState[tool.id] = true; // Default: an
|
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
|
// Gruppieren nach Kategorie
|
||||||
const cats = {};
|
const cats = {};
|
||||||
@@ -1272,6 +1286,15 @@
|
|||||||
document.getElementById('btn-save-perms').disabled = true;
|
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 ────────────────────────────────
|
// ── Einstellungen: Model ────────────────────────────────
|
||||||
|
|
||||||
function loadModel() {
|
function loadModel() {
|
||||||
|
|||||||
+29
-3
@@ -1473,12 +1473,38 @@ async function handleSavePermissions(clientWs, allowedTools) {
|
|||||||
`const dir=f.substring(0,f.lastIndexOf("/"));`,
|
`const dir=f.substring(0,f.lastIndexOf("/"));`,
|
||||||
'try{fs.mkdirSync(dir,{recursive:true});}catch(e){}',
|
'try{fs.mkdirSync(dir,{recursive:true});}catch(e){}',
|
||||||
'fs.writeFileSync(f,JSON.stringify(s,null,2));',
|
'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("");
|
].join("");
|
||||||
const b64 = Buffer.from(script).toString("base64");
|
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 }));
|
// Verify: gespeicherte Daten mit gewuenschten vergleichen
|
||||||
log("info", "server", "Berechtigungen gespeichert");
|
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) {
|
} catch (err) {
|
||||||
log("error", "server", `Berechtigungen speichern fehlgeschlagen: ${err.message}`);
|
log("error", "server", `Berechtigungen speichern fehlgeschlagen: ${err.message}`);
|
||||||
clientWs.send(JSON.stringify({ type: "permissions_saved", ok: false, error: err.message }));
|
clientWs.send(JSON.stringify({ type: "permissions_saved", ok: false, error: err.message }));
|
||||||
|
|||||||
Reference in New Issue
Block a user