From 1a0f3b507e381163bd5f9df702b7998be575c108 Mon Sep 17 00:00:00 2001 From: Meleki Date: Mon, 6 Jul 2026 16:18:56 +0200 Subject: [PATCH] =?UTF-8?q?Session-Men=C3=BC:=20Agent/Session=20bearbeiten?= =?UTF-8?q?=20+=20R=C3=BCcksprung=20zum=20Chat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zwei neue Menü-Einträge im Session-Header-Menü (rechts oben): - Sparte "Agent" → "Agent bearbeiten" (Sprung zur Agent-Edit-Page) - Sparte "Session" → "Session bearbeiten" (Sprung zur Session-Edit-Page) Beide Sparten sind jetzt immer sichtbar (vorher nur bei vorhandenen Custom-Commands). Speichern/Abbrechen auf beiden Edit-Pages springt kontextabhängig zurück: zum Chat, wenn die Page von dort geöffnet wurde (returnTo/returnId), sonst wie bisher zum Dashboard. Löschen bleibt → Dashboard. Co-Authored-By: Claude Opus 4.8 --- wwwroot/js/pages/agent-page.js | 13 ++++++++++-- wwwroot/js/pages/chat-page.js | 35 +++++++++++++++++++++++++------- wwwroot/js/pages/session-page.js | 13 ++++++++++-- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/wwwroot/js/pages/agent-page.js b/wwwroot/js/pages/agent-page.js index 2ddb0b9..f34f2f1 100644 --- a/wwwroot/js/pages/agent-page.js +++ b/wwwroot/js/pages/agent-page.js @@ -93,6 +93,15 @@ registerPage('agent', { const saveBtn = document.getElementById('agentSaveBtn'); const cancelBtn = document.getElementById('agentCancelBtn'); const deleteBtn = document.getElementById('agentDeleteBtn'); + + // Rücksprung nach Speichern/Abbrechen: zurück zum Chat, wenn von dort geöffnet – sonst Dashboard + const goBack = () => { + if (params.returnTo === 'chat' && params.returnId) { + navigateTo('chat', { id: params.returnId }); + } else { + navigateTo('dashboard'); + } + }; const commandsList = document.getElementById('agentCommandsList'); const addCommandBtn = document.getElementById('agentAddCommandBtn'); const skillsSection = document.getElementById('agentSkillsSection'); @@ -200,11 +209,11 @@ registerPage('agent', { const selectedSlugs = getSelectedSkills(skillList); await apiSetAgentSkills(agentId, selectedSlugs); } - navigateTo('dashboard'); + goBack(); }); // Abbrechen - cancelBtn.addEventListener('click', () => navigateTo('dashboard')); + cancelBtn.addEventListener('click', () => goBack()); // Löschen deleteBtn.addEventListener('click', async () => { diff --git a/wwwroot/js/pages/chat-page.js b/wwwroot/js/pages/chat-page.js index 40fa0ef..c898c3e 100644 --- a/wwwroot/js/pages/chat-page.js +++ b/wwwroot/js/pages/chat-page.js @@ -472,9 +472,8 @@ registerPage('chat', { let sessionCmds = []; try { sessionCmds = JSON.parse(session.customCommands || '[]') || []; } catch(e) {} - const addCmdSection = (cmds, label) => { - const validCmds = cmds.filter(c => c.name && c.command); - if (validCmds.length === 0) return; + // Sektions-Kopf (Separator + Label) + const addSectionHeader = (label) => { const sep = document.createElement('div'); sep.className = 'header-menu-separator'; chatMenuDropdown.appendChild(sep); @@ -482,8 +481,23 @@ registerPage('chat', { lbl.className = 'header-menu-label'; lbl.textContent = label; chatMenuDropdown.appendChild(lbl); - validCmds.forEach(cmd => { - if (!cmd.name || !cmd.command) return; + }; + + // Navigations-Eintrag (z.B. "Agent bearbeiten" → Sprung zur Edit-Page) + const addNavItem = (label, icon, target, targetParams) => { + const btn = document.createElement('button'); + btn.className = 'header-menu-item'; + btn.innerHTML = ` ${label}`; + btn.addEventListener('click', () => { + chatMenuDropdown.hidden = true; + navigateTo(target, targetParams); + }); + chatMenuDropdown.appendChild(btn); + }; + + // Custom-Command-Buttons einer Sparte anhängen + const addCmdButtons = (cmds) => { + cmds.filter(c => c.name && c.command).forEach(cmd => { const type = cmd.type || 'background'; const btn = document.createElement('button'); btn.className = 'header-menu-item header-menu-cmd'; @@ -519,8 +533,15 @@ registerPage('chat', { }); }; - addCmdSection(agentCmds, 'Agent'); - addCmdSection(sessionCmds, 'Session'); + // Sparte "Agent": bearbeiten + Agent-Befehle + addSectionHeader('Agent'); + if (currentAgentId) addNavItem('Agent bearbeiten', 'fa-pencil', 'agent', { id: currentAgentId, returnTo: 'chat', returnId: sessionId }); + addCmdButtons(agentCmds); + + // Sparte "Session": bearbeiten + Session-Befehle + addSectionHeader('Session'); + addNavItem('Session bearbeiten', 'fa-pencil', 'session', { id: sessionId, returnTo: 'chat', returnId: sessionId }); + addCmdButtons(sessionCmds); } // Zurück zum Dashboard diff --git a/wwwroot/js/pages/session-page.js b/wwwroot/js/pages/session-page.js index 60b842f..7d03a77 100644 --- a/wwwroot/js/pages/session-page.js +++ b/wwwroot/js/pages/session-page.js @@ -36,6 +36,15 @@ registerPage('session', { const saveBtn = document.getElementById('sessionSaveBtn'); const cancelBtn = document.getElementById('sessionCancelBtn'); const deleteBtn = document.getElementById('sessionDeleteBtn'); + + // Rücksprung nach Speichern/Abbrechen: zurück zum Chat, wenn von dort geöffnet – sonst Dashboard + const goBack = () => { + if (params.returnTo === 'chat' && params.returnId) { + navigateTo('chat', { id: params.returnId }); + } else { + navigateTo('dashboard'); + } + }; const commandsList = document.getElementById('customCommandsList'); const addCommandBtn = document.getElementById('addCommandBtn'); const mcpServersList = document.getElementById('mcpServersList'); @@ -246,11 +255,11 @@ registerPage('session', { return; } } - navigateTo('dashboard'); + goBack(); }); // Abbrechen - cancelBtn.addEventListener('click', () => navigateTo('dashboard')); + cancelBtn.addEventListener('click', () => goBack()); // Löschen deleteBtn.addEventListener('click', async () => {