save with verify and restart new session
This commit is contained in:
parent
cd9d8cda1f
commit
1d48dbe7d5
|
|
@ -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!')
|
||||
+ '<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;
|
||||
}
|
||||
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() {
|
||||
|
|
|
|||
|
|
@ -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 }));
|
||||
|
|
|
|||
Loading…
Reference in New Issue